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(iban As %String = "") As %Boolean
ClassMethod IBAN(pIBAN As %String = "") As %Boolean
{
{
If iban=..IBANGenerate(iban) Quit 1
If pIBAN=..IBANGenerate(pIBAN) Quit 1
Quit 0
Quit 0
}
}


ClassMethod IBANGenerate(iban As %String = "") As %String
ClassMethod IBANGenerate(pIBAN As %String = "") As %String
{
{
Set iban=$ZConvert(iban, "U")
Set pIBAN=$ZConvert(pIBAN, "U")
Set cc=$Extract(iban, 1, 2)
Set cc=$Extract(pIBAN, 1, 2)
Set cd=$Extract(iban, 3, 4)
Set cd=$Extract(pIBAN, 3, 4)
Set bban=$Extract(iban, 5, *)
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(str As %String, div As %Integer) As %Integer [ Internal, Private ]
ClassMethod Mod(num As %Integer, div As %Integer) As %Integer [ Internal, Private ]
{
{
If $Length(str)<9 Quit str#div
If $Length(num)<9 Quit num#div
Set res=0
Set res=0
For i=1:1:$Length(str)\7+1 {
For i=1:1:$Length(num)\7+1 {
Set res=(res_$Extract(str, 1, 7))#div
Set res=(res_$Extract(num, 1, 7))#div
Set str=$Extract(str, 8, *)
Set num=$Extract(num, 8, *)
}
}
Quit res
Quit res