52 lines
1.9 KiB
Plaintext
52 lines
1.9 KiB
Plaintext
( ( IBAN-check
|
|
= table country cd len N c
|
|
. (AL.28) (AD.24) (AT.20) (AZ.28) (BE.16) (BH.22) (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) (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) (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)
|
|
: ?table
|
|
& @(!arg:?country [2 ?cd [4 ?arg)
|
|
& str$(!arg !country !cd):?arg
|
|
& ( !table:? (!country.?len) ?
|
|
& :?N
|
|
& ( @( !arg
|
|
: ?
|
|
( %@?c ?
|
|
& ( !c:#
|
|
| !c:~<A:~>Z
|
|
& asc$!c+-1*asc$A+10:?c
|
|
& 1+!len:?len
|
|
| !c:" "&:?c
|
|
|
|
|
)
|
|
& !N !c:?N
|
|
& ~
|
|
)
|
|
)
|
|
| str$!N:?N:#
|
|
& ( @(!N:? [!len)
|
|
& ( mod$(!N,97):1&out$OK
|
|
| out$"wrong check digits"
|
|
)
|
|
| out$"wrong length"
|
|
)
|
|
| @(!N:? ~#%?c ?)
|
|
& out$(str$("invalid character: '" !c "'"))
|
|
)
|
|
| out$(str$("invalid country code: '" !country "'"))
|
|
)
|
|
)
|
|
& IBAN-check$"GB82 WEST 1234 5698 7654 32 9"
|
|
& IBAN-check$"GX82 WEST 1234 5698 7654 32"
|
|
& IBAN-check$"GB82 WEST 1234 5698 7654 32"
|
|
& IBAN-check$GB82WEST12345698765432
|
|
& IBAN-check$"gb82 west 1234 5698 7654 32"
|
|
& IBAN-check$"GB82 TEST 1234 5698 7654 32"
|
|
& IBAN-check$"GB82 WEST 1243 5698 7654 32"
|
|
& IBAN-check$"GB82 west 1243 5698 7654 32"
|
|
);
|