IBAN: Difference between revisions
Content added Content deleted
(added Caché ObjectScript) |
m (Minor edit) |
||
Line 1: | Line 1: | ||
{{draft task}} |
{{draft task}} |
||
{{wikipedia}} |
{{wikipedia}} |
||
The [[wp:International_Bank_Account_Number|International Bank Account Number (IBAN)]] is an internationally agreed means of identifying bank accounts across national borders with a reduced risk of propagating [[wp:Transcription_error|transcription errors]. The IBAN consists of up to 34 alphanumeric characters: first the two-letter ISO 3166-1 alpha-2 country code, then two check digits, and finally a country-specific Basic Bank Account Number (BBAN). The check digits enable a sanity check of the bank account number to confirm its integrity even before submitting a transaction. |
The [[wp:International_Bank_Account_Number|International Bank Account Number (IBAN)]] is an internationally agreed means of identifying bank accounts across national borders with a reduced risk of propagating [[wp:Transcription_error|transcription errors]]. The IBAN consists of up to 34 alphanumeric characters: first the two-letter ISO 3166-1 alpha-2 country code, then two check digits, and finally a country-specific Basic Bank Account Number (BBAN). The check digits enable a sanity check of the bank account number to confirm its integrity even before submitting a transaction. |
||
The task here is to validate the following fictitious IBAN: GB82 WEST 1234 5698 7654 32. Details of the algorithm can be found on the Wikipedia page. |
The task here is to validate the following fictitious IBAN: GB82 WEST 1234 5698 7654 32. Details of the algorithm can be found on the Wikipedia page. |
||
Line 10: | Line 10: | ||
{ |
{ |
||
ClassMethod IBAN( |
ClassMethod IBAN(pIBAN As %String = "") As %Boolean |
||
{ |
{ |
||
If |
If pIBAN=..IBANGenerate(pIBAN) Quit 1 |
||
Quit 0 |
Quit 0 |
||
} |
} |
||
ClassMethod IBANGenerate( |
ClassMethod IBANGenerate(pIBAN As %String = "") As %String |
||
{ |
{ |
||
Set |
Set pIBAN=$ZConvert(pIBAN, "U") |
||
Set cc=$Extract( |
Set cc=$Extract(pIBAN, 1, 2) |
||
Set cd=$Extract( |
Set cd=$Extract(pIBAN, 3, 4) |
||
Set bban=$Extract( |
Set bban=$Extract(pIBAN, 5, *) |
||
Set str="", alt=$ZStrip(bban_cc_"00", "*E'U'N") |
Set str="", alt=$ZStrip(bban_cc_"00", "*E'U'N") |
||
For i=1:1:$Length(alt) { |
For i=1:1:$Length(alt) { |
||
Line 33: | Line 33: | ||
} |
} |
||
ClassMethod Mod( |
ClassMethod Mod(num As %Integer, div As %Integer) As %Integer [ Internal, Private ] |
||
{ |
{ |
||
If $Length( |
If $Length(num)<9 Quit num#div |
||
Set res=0 |
Set res=0 |
||
For i=1:1:$Length( |
For i=1:1:$Length(num)\7+1 { |
||
Set res=(res_$Extract( |
Set res=(res_$Extract(num, 1, 7))#div |
||
Set |
Set num=$Extract(num, 8, *) |
||
} |
} |
||
Quit res |
Quit res |