View Single Post
  #8 (permalink)  
Old 07-13-2012, 03:37 PM
Arne Ortlinghaus
Guest
 
Posts: n/a
Default Re: Mod() function and large numbers

I can also offer some IBAN Check code using the arithmetic of an Oracle
database.

Arne Ortlinghaus
ACS Data Systems


method ValidateIBAN(cIBANChar as string) class clsIBAN
local cIBANTmp1, cIBANTmp2, cChar, cSql as string
local iPos as dword
local nChDig as usual

if ascan(_aLaender,left(cIBANChar,2)) == 0
return true
end if
cIBANChar := AllTrim(cIBANChar) // Todo 66425 AO 12.07.2012 Runtimefehler
bei IBAN-Prüfung im Falle von falschen Zeichen
cIBANTmp1 := substr(cIBANChar,5)+left(cIBANChar,4)
cIBANTmp2 := ""

for iPos := 1 to slen(cIBANTmp1)
cChar := substr(cIBANTmp1,iPos,1)
if ! isdigit(string2psz(cChar))
cChar := str(asc(cChar)-55,2)
end if
cIBANTmp2 += cChar
next
if !Empty(Val(cIBANTmp2)) // Todo 63367 Fehlermeldung bei Import IBAN in
Kunden/Lieferanten
cSql := 'SELECT MOD('+SQLValue2SQLString(cIBANTmp2)+',97) "Modulus" FROM
DUAL'
nChDig := GetSQLValueFast(cSql, "N", 10, 0, 0, null_object, true)
else
nChDig := 0
endif
//msginfo(cIBANChar+chr(13)+chr(10)+cIBANTmp1+chr(13 )+chr(10)+cIBANTmp2+chr(13)+chr(10)+cSql+chr(13)+c hr(10)+typevalue2string(nChDig))

return nChDig == 1
method Init(oOwner, oServer) class clsIBAN

_oOwner := oOwner
_oServer := oServer

_aLaender := ArrayCreate(18)
_aLaengen := ArrayCreate(18)

_aLaender[1] := "IT"
_aLaengen[1] := 27
_aLaender[2] := "AT"
_aLaengen[2] := 20
_aLaender[3] := "BE"
_aLaengen[3] := 16
_aLaender[4] := "CH"
_aLaengen[4] := 21
_aLaender[5] := "DE"
_aLaengen[5] := 22
_aLaender[6] := "DK"
_aLaengen[6] := 18
_aLaender[7] := "ES"
_aLaengen[7] := 24
_aLaender[8] := "FI"
_aLaengen[8] := 18
_aLaender[9] := "FR"
_aLaengen[9] := 27
_aLaender[10] := "GB"
_aLaengen[10] := 22
_aLaender[11] := "IE"
_aLaengen[11] := 22
_aLaender[12] := "IS"
_aLaengen[13] := 26
_aLaender[13] := "LU"
_aLaengen[13] := 20
_aLaender[14] := "NL"
_aLaengen[14] := 18
_aLaender[15] := "NO"
_aLaengen[15] := 15
_aLaender[16] := "PT"
_aLaengen[16] := 25
_aLaender[17] := "SE"
_aLaengen[17] := 24
_aLaender[18] := "SM"
_aLaengen[18] := 27
return self
class clsIBAN

protect _oOwner as object
protect _oServer as object
protect _aLaender as array
protect _aLaengen as array

declare method ValidateIBAN

Reply With Quote