Jump to content

IBAN: Difference between revisions

4,093 bytes added ,  8 years ago
no edit summary
No edit summary
Line 1,973:
 
(bye)</lang>
=={{header|PureBasic}}==
<lang purebasic>EnableExplicit
Enumeration IBAN
#IBAN_VAL
#IBAN_SUM
#IBAN_NOSPACE
#IBAN_VAL_FORM
#IBAN_SUM_FORM
EndEnumeration
 
NewMap CData.i()
Macro CCD(SIGN,LENGTH)
CData(SIGN)=LENGTH
EndMacro
 
Procedure.s IBANForm(iban.s,form.i)
Define fn.s, c.i
fn=RemoveString(UCase(iban),Chr(32))
If form=#IBAN_NOSPACE : ProcedureReturn fn : EndIf
fn=Mid(fn,5)+Mid(fn,1,4)
For c=65 To 90
fn=ReplaceString(fn,Chr(c),Str(c-55))
Next c
If form=#IBAN_VAL_FORM : ProcedureReturn fn : EndIf
fn=Left(fn,Len(fn)-2)+"00"
If form=#IBAN_SUM_FORM : ProcedureReturn fn : EndIf
EndProcedure
 
Procedure.s m97iban(iban.s,calculate.i)
Define i.i, part.s, rest.s
Select calculate
Case #IBAN_VAL : iban=IBANForm(iban,#IBAN_VAL_FORM)
Case #IBAN_SUM : iban=IBANForm(iban,#IBAN_SUM_FORM)
EndSelect
For i=1 To Len(iban) ; Validierung der Prüfsumme
part+Mid(iban,i,1)
If Val(rest+part)<97 : Continue : EndIf
rest=Str((Val(rest+part)) %97) : part=""
Next
Select calculate
Case #IBAN_VAL : ProcedureReturn rest
Case #IBAN_SUM : ProcedureReturn RSet(Str(98-Val(rest+part)),2,"0")
EndSelect
EndProcedure
 
CCD("AL",28) : CCD("AD",24) : CCD("AT",20) : CCD("AZ",28) : CCD("BE",16) : CCD("BH",22) : CCD("BA",20)
CCD("BR",29) : CCD("BG",22) : CCD("CR",21) : CCD("HR",21) : CCD("CY",28) : CCD("CZ",24) : CCD("DK",18)
CCD("DO",28) : CCD("EE",20) : CCD("FO",18) : CCD("FI",18) : CCD("FR",27) : CCD("GE",22) : CCD("DE",22)
CCD("GI",23) : CCD("GR",27) : CCD("GL",18) : CCD("GT",28) : CCD("HU",28) : CCD("IS",26) : CCD("IE",22)
CCD("IL",23) : CCD("IT",27) : CCD("KZ",20) : CCD("KW",30) : CCD("LV",21) : CCD("LB",28) : CCD("LI",21)
CCD("LT",20) : CCD("LU",20) : CCD("MK",19) : CCD("MT",31) : CCD("MR",27) : CCD("MU",30) : CCD("MC",27)
CCD("MD",24) : CCD("ME",22) : CCD("NL",18) : CCD("NO",15) : CCD("PK",24) : CCD("PS",29) : CCD("PL",28)
CCD("PT",25) : CCD("RO",24) : CCD("SM",27) : CCD("SA",24) : CCD("RS",22) : CCD("SK",24) : CCD("SI",19)
CCD("ES",24) : CCD("SE",24) : CCD("CH",21) : CCD("TN",24) : CCD("TR",26) : CCD("AE",23) : CCD("GB",22)
CCD("VG",24)
 
DataSection
IBANData:
Data.s "GB82 WEST 1234 5698 7654 32"
Data.s "GB82WEST12345698765432"
Data.s "gb82 west 1234 5698 7654 32"
Data.s "GB82 TEST 1234 5698 7654 32"
Data.s "GR16 0110 1250 0000 0001 2300 695"
Data.s "GB29 NWBK 6016 1331 9268 19"
Data.s "SA03 8000 0000 6080 1016 7519"
Data.s "CH93 0076 2011 6238 5295 7"
Data.s "IL62 0108 0000 0009 9999 999"
Data.s "IL62-0108-0000-0009-9999-999"
Data.s "US12 3456 7890 0987 6543 210"
Data.s "GR16 0110 1250 0000 0001 2300 695X"
Data.s Chr(0)
EndDataSection
 
Define iban.s, cc.s
OpenConsole()
Restore IBANData
Repeat
Read.s iban : If iban=Chr(0) : Break : EndIf
Print("IBAN"+#TAB$+": "+LSet(iban,35,Chr(32))+#TAB$)
cc=Left(IBANForm(iban,#IBAN_NOSPACE),2)
If CData(cc)
If Not CData()=Len(IBANForm(iban,#IBAN_NOSPACE)) : PrintN("[INCORRECT: LENGTH]") : Continue : EndIf
Else
PrintN("[INCORRECT: COUNTRY]") : Continue
EndIf
If Not Val(m97iban(iban,#IBAN_VAL))=1 : PrintN("[INCORRECT: MOD97]") : Continue : EndIf
If Not Right(IBANForm(iban,#IBAN_VAL_FORM),2)=m97iban(iban,#IBAN_SUM)
PrintN("[INCORRECT: CHECKSUM]") : Continue
EndIf
PrintN("[CORRECT]")
ForEver
Input()
End</lang>
{{out}}
<pre>
IBAN : GB82 WEST 1234 5698 7654 32 [CORRECT]
IBAN : GB82WEST12345698765432 [CORRECT]
IBAN : gb82 west 1234 5698 7654 32 [CORRECT]
IBAN : GB82 TEST 1234 5698 7654 32 [INCORRECT: MOD97]
IBAN : GR16 0110 1250 0000 0001 2300 695 [CORRECT]
IBAN : GB29 NWBK 6016 1331 9268 19 [CORRECT]
IBAN : SA03 8000 0000 6080 1016 7519 [CORRECT]
IBAN : CH93 0076 2011 6238 5295 7 [CORRECT]
IBAN : IL62 0108 0000 0009 9999 999 [CORRECT]
IBAN : IL62-0108-0000-0009-9999-999 [INCORRECT: LENGTH]
IBAN : US12 3456 7890 0987 6543 210 [INCORRECT: COUNTRY]
IBAN : GR16 0110 1250 0000 0001 2300 695X [INCORRECT: LENGTH]
</pre>
=={{header|Python}}==
{{trans|Ruby}}
164

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.