IBAN: Difference between revisions
Content added Content deleted
(Promote to full task from draft.) |
(→{{header|AutoHotkey}}: Created AutoHotkey entry) |
||
Line 126: | Line 126: | ||
GB82 TEST 1234 5698 7654 32 is not valid. |
GB82 TEST 1234 5698 7654 32 is not valid. |
||
GB82 WEST 1243 5698 7654 32 is not valid.</pre> |
GB82 WEST 1243 5698 7654 32 is not valid.</pre> |
||
=={{header|AutoHotkey}}== |
|||
{{works with|AutoHotkey 1.1}} |
|||
<lang AutoHotkey>IBANs := ["GB82 WEST 1234 5698 7654 32" |
|||
, "gb82 WEST 1234 5698 7654 32" |
|||
, "GB82WEST12345698765432" |
|||
, "GB82 WEST 234 5698 7654 32" |
|||
, "GB82 WEST 1234 5698 7654 33" |
|||
, "AE82 WEST 1234 5698 7654 32"] |
|||
for k, v in IBANs |
|||
Output .= v " is" (ValidIBAN(v) ? "" : " not") " valid.`n" |
|||
MsgBox, % Output |
|||
ValidIBAN(n) { |
|||
static CC := {AL:28,AD:24,AT:20,AZ:28,BH:22,BE:16,BA:20,BR:29,BG:22,CR:21 |
|||
,HR:21,CY:28,CZ:24,DK:18,DO:28,EE:20,FO:18,FI:18,FR:27,GE:22 |
|||
,DE:22,GI:23,GR:27,GL:18,GT:28,HU:28,IS:26,IE:22,IL:23,IT:27 |
|||
,JO:30,KZ:20,KW:30,LV:21,LB:28,LI:21,LT:20,LU:20,MK:19,MT:31 |
|||
,MR:27,MU:30,MC:27,MD:24,ME:22,NL:18,NO:15,PK:24,PS:29,PL:28 |
|||
,PT:25,QA:29,RO:24,SM:27,SA:24,RS:22,SK:24,SI:19,ES:24,SE:24 |
|||
,CH:21,TN:24,TR:26,AE:23,GB:22,VG:24} |
|||
StringReplace, n, n, % A_Space,, A |
|||
;Check that the total IBAN length is correct as per the country |
|||
if (StrLen(n) != CC[SubStr(n, 1, 2)]) |
|||
return false |
|||
StringUpper, n, n |
|||
;Move the four initial characters to the end of the string |
|||
n := SubStr(n, 5) SubStr(n, 1, 4) |
|||
;Replace each letter in the string with two digits |
|||
Loop, Parse, n |
|||
{ |
|||
if A_LoopField is alpha |
|||
nn .= Asc(A_LoopField) - 55 |
|||
else |
|||
nn .= A_LoopField |
|||
} |
|||
return Mod97(nn) = 1 |
|||
} |
|||
Mod97(a) { |
|||
while a { |
|||
rem := Mod(rem SubStr(a, 1, 15), 97) |
|||
a := SubStr(a, 16) |
|||
} |
|||
return rem |
|||
}</lang> |
|||
{{Output}} |
|||
<pre>GB82 WEST 1234 5698 7654 32 is valid. |
|||
gb82 WEST 1234 5698 7654 32 is valid. |
|||
GB82WEST12345698765432 is valid. |
|||
GB82 WEST 234 5698 7654 32 is not valid. |
|||
GB82 WEST 1234 5698 7654 33 is not valid. |
|||
AE82 WEST 1234 5698 7654 32 is not valid.</pre> |
|||
=={{header|C}}== |
=={{header|C}}== |
||
<lang C>#include <alloca.h> |
<lang C>#include <alloca.h> |