IBAN: Difference between revisions

1,025 bytes added ,  10 years ago
m (Corrected C++ and C# syntax highlighting. Moved C# section to correct position. Fixed bug in COBOL example.)
Line 729:
<pre>GB82 WEST 1234 5698 7654 32 validation is: true
GB82 TEST 1234 5698 7654 32 validation is: false</pre>
 
=={{header|J}}==
<lang J>
NB. delete any blank characters
delblk =. #~ ' '&~:
NB. rearrange
rot =. '00' ,~ 2&}. @: (2&|.)
NB. characters -> "digits"
dig =. a. {~ (a.i.'0')+i.10
dig =. dig,a. {~ (a.i.'A')+i.26
todig =. dig&i.
coded =. [: ". 'x' ,~ delblk @: ": @: todig
 
NB. calculate check sum
cs =: 98 - 97 | coded @: rot @: delblk f.
 
NB. check sum as text
cstxt =. _2{. '0', [: ": cs
NB. replace first two characters
chgps =. [,2}.]
NB. shift country code
rotlc =. 2&|.
NB. insert check digits (position 3 and 4)
insertps =. chgps &.rotlc
 
NB. IBAN with newly calculated check digits
ibancd =: (cstxt insertps ]) f.
 
NB. check / generate check digits
ibancheck =: ] (]`('ok'"_) @. -:) ibancd
 
NB. groups of four characters
insertblk =. #~ # $ 1 1 1 1j1"_
quads =: insertblk @: delblk f.
 
NB. IBAN
iban =: quads @: ibancheck
</lang>
{{out}}
<pre>
iban 'GB82 WEST 1234 5698 7654 32'
ok
iban 'GB?? WEST 1234 5698 7654 32'
GB82 WEST 1234 5698 7654 32
iban 'GB??WEST12345698765432'
GB82 WEST 1234 5698 7654 32
</pre>
 
=={{header|Perl}}==
Anonymous user