Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,3 +0,0 @@
|
|||
package Iban_Code is
|
||||
function Is_Legal(Iban : String) return Boolean;
|
||||
end Iban_Code;
|
||||
|
|
@ -1,88 +0,0 @@
|
|||
with Ada.Characters.Handling; use Ada.Characters.Handling;
|
||||
with Ada.Containers.Hashed_Maps;
|
||||
with Ada.Strings.Hash;
|
||||
|
||||
package body Iban_Code is
|
||||
|
||||
subtype Nation is String (1..2);
|
||||
|
||||
package String_Integer is new Ada.Containers.Hashed_Maps
|
||||
(Nation, Integer, Ada.Strings.Hash, Equivalent_Keys => "=");
|
||||
|
||||
Nations : String_Integer.Map;
|
||||
|
||||
function Is_Legal(Iban : String) return Boolean
|
||||
is
|
||||
Temp : String(Iban'Range) := (others => ' ');
|
||||
Count : Integer;
|
||||
Ch : Character;
|
||||
Num : Integer := 0;
|
||||
begin
|
||||
-- remove blank spaces and check characters
|
||||
Count := Temp'First;
|
||||
for I in Iban'Range loop
|
||||
case Iban(I) is
|
||||
when ' ' => null;
|
||||
when 'a'..'z' =>
|
||||
Temp(Count) := To_Upper(Iban(I));
|
||||
Count := Count + 1;
|
||||
when 'A'..'Z'|'0'..'9' =>
|
||||
Temp(Count) := Iban(I);
|
||||
Count := Count + 1;
|
||||
when others => return False;
|
||||
end case;
|
||||
end loop;
|
||||
-- check nation code and length
|
||||
if not Nations.Contains (Temp(1..2)) or else
|
||||
Nations.Element (Temp(1..2))/= Count - 1 then
|
||||
return False;
|
||||
end if;
|
||||
-- move the 4 initial characters to the end
|
||||
Temp(Temp'First..Count-1) := Temp(5..Count-1) & Temp(Temp'First..4);
|
||||
-- compute remainder modulo 97
|
||||
for I in Temp'First..Count-1 loop
|
||||
Ch := Temp(I);
|
||||
if Ch in '0'..'9' then
|
||||
Num := Integer'Value(Integer'Image(Num) & Ch) mod 97;
|
||||
else
|
||||
Num := (Num * 100 +
|
||||
(Character'Pos(Ch) - Character'Pos('A') + 10)) mod 97;
|
||||
end if;
|
||||
end loop;
|
||||
return Num = 1;
|
||||
end Is_Legal;
|
||||
|
||||
begin
|
||||
Nations.insert("AL", 28); Nations.insert("AD", 24);
|
||||
Nations.insert("AT", 20); Nations.insert("AZ", 28);
|
||||
Nations.insert("BE", 16); Nations.insert("BH", 22);
|
||||
Nations.insert("BA", 20); Nations.insert("BR", 29);
|
||||
Nations.insert("BG", 22); Nations.insert("CR", 21);
|
||||
Nations.insert("HR", 21); Nations.insert("CY", 28);
|
||||
Nations.insert("CZ", 24); Nations.insert("DK", 18);
|
||||
Nations.insert("DO", 28); Nations.insert("EE", 20);
|
||||
Nations.insert("FO", 18); Nations.insert("FI", 18);
|
||||
Nations.insert("FR", 27); Nations.insert("GE", 22);
|
||||
Nations.insert("DE", 22); Nations.insert("GI", 23);
|
||||
Nations.insert("GR", 27); Nations.insert("GL", 18);
|
||||
Nations.insert("GT", 28); Nations.insert("HU", 28);
|
||||
Nations.insert("IS", 26); Nations.insert("IE", 22);
|
||||
Nations.insert("IL", 23); Nations.insert("IT", 27);
|
||||
Nations.insert("KZ", 20); Nations.insert("KW", 30);
|
||||
Nations.insert("LV", 21); Nations.insert("LB", 28);
|
||||
Nations.insert("LI", 21); Nations.insert("LT", 20);
|
||||
Nations.insert("LU", 20); Nations.insert("MK", 19);
|
||||
Nations.insert("MT", 31); Nations.insert("MR", 27);
|
||||
Nations.insert("MU", 30); Nations.insert("MC", 27);
|
||||
Nations.insert("MD", 24); Nations.insert("ME", 22);
|
||||
Nations.insert("NL", 18); Nations.insert("NO", 15);
|
||||
Nations.insert("PK", 24); Nations.insert("PS", 29);
|
||||
Nations.insert("PL", 28); Nations.insert("PT", 25);
|
||||
Nations.insert("RO", 24); Nations.insert("SM", 27);
|
||||
Nations.insert("SA", 24); Nations.insert("RS", 22);
|
||||
Nations.insert("SK", 24); Nations.insert("SI", 19);
|
||||
Nations.insert("ES", 24); Nations.insert("SE", 24);
|
||||
Nations.insert("CH", 21); Nations.insert("TN", 24);
|
||||
Nations.insert("TR", 26); Nations.insert("AE", 23);
|
||||
Nations.insert("GB", 22); Nations.insert("VG", 24);
|
||||
end Iban_Code;
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
with Ada.Text_Io; use Ada.Text_Io;
|
||||
with Iban_Code;
|
||||
|
||||
procedure Check_Iban is
|
||||
|
||||
procedure Check(Iban : String) is
|
||||
begin
|
||||
if Iban_Code.Is_Legal(Iban) then
|
||||
Put_Line(Iban & " is valid.");
|
||||
else
|
||||
Put_Line(Iban & " is not valid.");
|
||||
end if;
|
||||
end Check;
|
||||
|
||||
begin
|
||||
Check("GB82 WEST 1234 5698 7654 32");
|
||||
Check("GB82WEST12345698765432");
|
||||
Check("gb82 west 1234 5698 7654 32");
|
||||
Check("GB82 TEST 1234 5698 7654 32");
|
||||
Check("GB82 WEST 1243 5698 7654 32");
|
||||
end Check_Iban;
|
||||
|
|
@ -1,161 +0,0 @@
|
|||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. iban-main.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 iban PIC X(50).
|
||||
01 iban-flag PIC X.
|
||||
88 is-valid VALUE "Y", FALSE "N".
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
main-line.
|
||||
MOVE "GB82 WEST 1234 5698 7654 32" TO iban
|
||||
PERFORM display-validity
|
||||
|
||||
MOVE "GB82 TEST 1234 5698 7654 32" TO iban
|
||||
PERFORM display-validity
|
||||
|
||||
GOBACK
|
||||
.
|
||||
display-validity.
|
||||
CALL "validate-iban" USING CONTENT iban, REFERENCE iban-flag
|
||||
IF is-valid
|
||||
DISPLAY FUNCTION TRIM(iban) " is valid."
|
||||
ELSE
|
||||
DISPLAY FUNCTION TRIM(iban) " is not valid."
|
||||
END-IF
|
||||
.
|
||||
END PROGRAM iban-main.
|
||||
|
||||
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. validate-iban.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 country-lengths-area VALUE "AD24AE23AL28AT20AZ28BA20BE16"
|
||||
& "BG22BH22BR29CH21CR21CY28CZ24DE22DK18DO28EE20ES24FI18FO18F"
|
||||
& "R27GB22GE22GI23GL18GR27GT28HR21HU28IE22IL23IS26IT27KW30KZ"
|
||||
& "20LB28LI21LT20LU20LV21MC27MD24ME22MK19MR27MT31MU30NL18NO1"
|
||||
& "5PK24PL28PS29PT25RO24RS22SA24SE24SI19SK24SM27TN24TR26VG24"
|
||||
.
|
||||
03 country-lengths OCCURS 64 TIMES
|
||||
INDEXED BY country-lengths-idx.
|
||||
05 country-code PIC XX.
|
||||
05 country-len PIC 99.
|
||||
|
||||
01 offset PIC 99.
|
||||
|
||||
01 i PIC 99.
|
||||
|
||||
01 len PIC 99.
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 iban PIC X(50).
|
||||
|
||||
01 valid-flag PIC X.
|
||||
88 is-valid VALUE "Y", FALSE "N".
|
||||
|
||||
PROCEDURE DIVISION USING iban, valid-flag.
|
||||
MOVE FUNCTION UPPER-CASE(iban) TO iban
|
||||
CALL "remove-spaces" USING iban
|
||||
|
||||
*> Check if country-code and length are correct
|
||||
INITIALIZE len
|
||||
INSPECT iban TALLYING len FOR CHARACTERS BEFORE SPACE
|
||||
SET country-lengths-idx TO 1
|
||||
SEARCH country-lengths
|
||||
AT END
|
||||
SET is-valid TO FALSE
|
||||
GOBACK
|
||||
|
||||
WHEN country-code (country-lengths-idx) = iban (1:2)
|
||||
IF country-len (country-lengths-idx) NOT = len
|
||||
SET is-valid TO FALSE
|
||||
GOBACK
|
||||
END-IF
|
||||
END-SEARCH
|
||||
|
||||
CALL "create-iban-number" USING CONTENT len, REFERENCE iban
|
||||
|
||||
*> Mod 97 number formed.
|
||||
IF FUNCTION MOD(iban, 97) = 1
|
||||
SET is-valid TO TRUE
|
||||
ELSE
|
||||
SET is-valid TO FALSE
|
||||
END-IF
|
||||
.
|
||||
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. remove-spaces.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 i PIC 99.
|
||||
01 offset PIC 99.
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 str PIC X(50).
|
||||
|
||||
PROCEDURE DIVISION USING str.
|
||||
INITIALIZE offset
|
||||
PERFORM VARYING i FROM 1 BY 1 UNTIL i > 50
|
||||
EVALUATE TRUE
|
||||
WHEN str (i:1) = SPACE
|
||||
ADD 1 TO offset
|
||||
|
||||
WHEN offset NOT = ZERO
|
||||
MOVE str (i:1) TO str (i - offset:1)
|
||||
END-EVALUATE
|
||||
END-PERFORM
|
||||
MOVE SPACES TO str (50 - offset + 1:)
|
||||
.
|
||||
END PROGRAM remove-spaces.
|
||||
|
||||
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. create-iban-number.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 first-four PIC X(4).
|
||||
|
||||
01 iban-num PIC X(50).
|
||||
01 digit-num PIC 99 VALUE 1.
|
||||
|
||||
01 i PIC 99.
|
||||
|
||||
01 letter-num PIC 99.
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 len PIC 99.
|
||||
|
||||
01 iban PIC X(50).
|
||||
|
||||
PROCEDURE DIVISION USING len, iban.
|
||||
*> Move characters into final positions.
|
||||
MOVE iban (1:4) TO first-four
|
||||
MOVE iban (5:) TO iban
|
||||
MOVE first-four TO iban (len - 3:)
|
||||
|
||||
*> Convert letters to numbers.
|
||||
INITIALIZE iban-num, digit-num ALL TO VALUE
|
||||
PERFORM VARYING i FROM 1 BY 1
|
||||
UNTIL i > len OR iban (i:1) = SPACE
|
||||
IF iban (i:1) IS NUMERIC
|
||||
MOVE iban (i:1) TO iban-num (digit-num:1)
|
||||
ADD 1 TO digit-num
|
||||
ELSE
|
||||
COMPUTE letter-num =
|
||||
FUNCTION ORD(iban (i:1)) - FUNCTION ORD("A") + 10
|
||||
MOVE letter-num TO iban-num (digit-num:2)
|
||||
ADD 2 TO digit-num
|
||||
END-IF
|
||||
END-PERFORM
|
||||
|
||||
MOVE iban-num TO iban
|
||||
.
|
||||
|
||||
END PROGRAM create-iban-number.
|
||||
|
||||
END PROGRAM validate-iban.
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
function verifIBAN ([string]$ibanS)
|
||||
{
|
||||
if ($ibanS.Length -ne 27) {return $false} else
|
||||
{
|
||||
$ibanI="$($ibanS.Substring(4,23))$($ibanS.Substring(0,4))".ToUpper()
|
||||
[int]$comptIBAN=0
|
||||
$NumIBAN=""
|
||||
while ($comptIBAN -lt 27)
|
||||
{
|
||||
if ([byte]$ibanI[$comptIBAN] -ge 65 -and [byte]$ibanI[$comptIBAN] -le 90)
|
||||
{
|
||||
$NumIban+=([byte]$ibanI[$comptIBAN]-55)
|
||||
} #pour transformer les lettres en chiffres (A=10, B=11...)
|
||||
else
|
||||
{
|
||||
$NumIban+=$ibanI[$comptIBAN]
|
||||
}
|
||||
$comptIBAN++
|
||||
}
|
||||
#cela fait un nombre de 30 chiffres : trop pour powershell, je découpe donc les 9 premiers caractères :
|
||||
if ("$($NumIBAN.Substring(0,9)%97)$($NumIBAN.Substring(9,$NumIBAN.Length-9))"%97 -eq 1)
|
||||
{return $true}
|
||||
else
|
||||
{return $false}
|
||||
}
|
||||
} #fin fonction vérification IBAN / Stéphane RABANY 2018
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
@'
|
||||
"Country","Length","Example"
|
||||
"Albania",28,"AL47212110090000000235698741"
|
||||
"Andorra",24,"AD1200012030200359100100"
|
||||
"Austria",20,"AT611904300235473201"
|
||||
"Belgium",16,"BE68539007547034"
|
||||
"Bosnia and Herzegovina",20,"BA391290079401028494"
|
||||
"Bulgaria",22,"BG80BNBG96611020345678"
|
||||
"Croatia",21,"HR1210010051863000160"
|
||||
"Cyprus",28,"CY17002001280000001200527600"
|
||||
"Czech Republic",24,"CZ6508000000192000145399"
|
||||
"Denmark",18,"DK5000400440116243"
|
||||
"Estonia",20,"EE382200221020145685"
|
||||
"Faroe Islands",18,"FO1464600009692713"
|
||||
"Finland",18,"FI2112345600000785"
|
||||
"France",27,"FR1420041010050500013M02606"
|
||||
"Georgia",22,"GE29NB0000000101904917"
|
||||
"Germany",22,"DE89370400440532013000"
|
||||
"Gibraltar",23,"GI75NWBK000000007099453"
|
||||
"Greece",27,"GR1601101250000000012300695"
|
||||
"Greenland",18,"GL8964710001000206"
|
||||
"Hungary",28,"HU42117730161111101800000000"
|
||||
"Iceland",26,"IS140159260076545510730339"
|
||||
"Ireland",22,"IE29AIBK93115212345678"
|
||||
"Italy",27,"IT60X0542811101000000123456"
|
||||
"Kosovo",20,"XK051212012345678906"
|
||||
"Latvia",21,"LV80BANK0000435195001"
|
||||
"Liechtenstein",21,"LI21088100002324013AA"
|
||||
"Lithuania",20,"LT121000011101001000"
|
||||
"Luxembourg",20,"LU280019400644750000"
|
||||
"Macedonia",19,"MK07300000000042425"
|
||||
"Malta",31,"MT84MALT011000012345MTLCAST001S"
|
||||
"Moldova",24,"MD24AG000225100013104168"
|
||||
"Monaco",27,"MC5813488000010051108001292"
|
||||
"Montenegro",22,"ME25505000012345678951"
|
||||
"Netherlands",18,"NL91ABNA0417164300"
|
||||
"Norway",15,"NO9386011117947"
|
||||
"Poland",28,"PL27114020040000300201355387"
|
||||
"Portugal",25,"PT50000201231234567890154"
|
||||
"Romania",24,"RO49AAAA1B31007593840000"
|
||||
"San Marino",27,"SM86U0322509800000000270100"
|
||||
"Serbia",22,"RS35260005601001611379"
|
||||
"Slovakia",24,"SK3112000000198742637541"
|
||||
"Slovenia",19,"SI56191000000123438"
|
||||
"Spain",24,"ES9121000418450200051332"
|
||||
"Sweden",24,"SE3550000000054910000003"
|
||||
"Switzerland",21,"CH9300762011623852957"
|
||||
"Ukraine",29,"UA573543470006762462054925026"
|
||||
"United Kingdom",22,"GB29NWBK60161331926819"
|
||||
'@ -split "`r`n" | Set-Content -Path .\IBAN.csv -Force
|
||||
|
||||
$ibans = foreach ($iban in Import-Csv -Path .\IBAN.csv)
|
||||
{
|
||||
$iban | Select-Object -Property Country,
|
||||
@{Name='Code' ; Expression={$iban.Example.Substring(0,2)}},
|
||||
@{Name='Length'; Expression={[int]$iban.Length}},
|
||||
Example
|
||||
}
|
||||
|
||||
$ibans
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
$regex = [regex]'[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{6}[0-9]{5}([a-zA-Z0-9]?){0,16}'
|
||||
|
||||
foreach ($iban in $ibans)
|
||||
{
|
||||
[PSCustomObject]@{
|
||||
Country = $iban.Country
|
||||
Example = $iban.Example
|
||||
IsValid = $regex.IsMatch($iban.Example)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
Function validate_iban(s)
|
||||
validate_iban = Chr(34) & s & Chr(34) & " is NOT valid."
|
||||
Set cn_len = CreateObject("Scripting.Dictionary")
|
||||
With cn_len
|
||||
.Add "AL",28 : .Add "AD",24 : .Add "AT",20 : .Add "AZ",28 : .Add "BH",22 : .Add "BE",16
|
||||
.Add "BA",20 : .Add "BR",29 : .Add "BG",22 : .Add "CR",21 : .Add "HR",21 : .Add "CY",28
|
||||
.Add "CZ",24 : .Add "DK",18 : .Add "DO",28 : .Add "EE",20 : .Add "FO",18 : .Add "FI",18
|
||||
.Add "FR",27 : .Add "GE",22 : .Add "DE",22 : .Add "GI",23 : .Add "GR",27 : .Add "GL",18
|
||||
.Add "GT",28 : .Add "HU",28 : .Add "IS",26 : .Add "IE",22 : .Add "IL",23 : .Add "IT",27
|
||||
.Add "JO",30 : .Add "KZ",20 : .Add "KW",30 : .Add "LV",21 : .Add "LB",28 : .Add "LI",21
|
||||
.Add "LT",20 : .Add "LU",20 : .Add "MK",19 : .Add "MT",31 : .Add "MR",27 : .Add "MU",30
|
||||
.Add "MC",27 : .Add "MD",24 : .Add "ME",22 : .Add "NL",18 : .Add "NO",15 : .Add "PK",24
|
||||
.Add "PS",29 : .Add "PL",28 : .Add "PT",25 : .Add "QA",29 : .Add "RO",24 : .Add "SM",27
|
||||
.Add "SA",24 : .Add "RS",22 : .Add "SK",24 : .Add "SI",19 : .Add "ES",24 : .Add "SE",24
|
||||
.Add "CH",21 : .Add "TN",24 : .Add "TR",26 : .Add "AE",23 : .Add "GB",22 : .Add "VG",24
|
||||
End With
|
||||
iban = Replace(s," ","")
|
||||
If cn_len.Exists(Left(iban,2)) And Len(iban) = cn_len.Item(Left(iban,2)) Then
|
||||
'move the first 4 characters to the end
|
||||
iban = Mid(iban,5,Len(iban)-4) & Left(iban,4)
|
||||
'convert letters to numbers A=10 to Z=35
|
||||
D = ""
|
||||
For i = 1 To Len(iban)
|
||||
If Asc(Mid(iban,i,1)) >= 65 And Asc(Mid(iban,i,1)) <= 90 Then
|
||||
D = D & CStr(Asc(Mid(iban,i,1)) - 55)
|
||||
Else
|
||||
D = D & Mid(iban,i,1)
|
||||
End If
|
||||
Next
|
||||
'piece-wise modulo calculation
|
||||
Do
|
||||
If Len(D) > 9 Then
|
||||
N = CLng(Left(D,9)) Mod 97
|
||||
D = CStr(N) & Mid(D,10,Len(D)-9)
|
||||
Else
|
||||
N = CLng(Left(D,9)) Mod 97
|
||||
Exit Do
|
||||
End If
|
||||
Loop
|
||||
If N = 1 Then
|
||||
validate_iban = Chr(34) & s & Chr(34) & " is valid."
|
||||
End If
|
||||
End If
|
||||
End Function
|
||||
|
||||
'test several scenarios
|
||||
WScript.StdOut.WriteLine validate_iban("GB82 WEST 1234 5698 7654 32")
|
||||
WScript.StdOut.WriteLine validate_iban("GB82WEST12345698765432")
|
||||
WScript.StdOut.WriteLine validate_iban("gb82 west 1234 5698 7654 32")
|
||||
WScript.StdOut.WriteLine validate_iban("GB82 TEST 1234 5698 7654 32")
|
||||
WScript.StdOut.WriteLine validate_iban("GR16 0110 1250 0000 0001 2300 695")
|
||||
WScript.StdOut.WriteLine validate_iban("GB29 NWBK 6016 1331 9268 19")
|
||||
WScript.StdOut.WriteLine validate_iban("SA03 8000 0000 6080 1016 7519")
|
||||
WScript.StdOut.WriteLine validate_iban("CH93 0076 2011 6238 5295 7")
|
||||
WScript.StdOut.WriteLine validate_iban("IL62 0108 0000 0009 9999 999")
|
||||
WScript.StdOut.WriteLine validate_iban("IL62-0108-0000-0009-9999-999")
|
||||
WScript.StdOut.WriteLine validate_iban("US12 3456 7890 0987 6543 210")
|
||||
WScript.StdOut.WriteLine validate_iban("GR16 0110 1250 0000 0001 2300 695X")
|
||||
Loading…
Add table
Add a link
Reference in a new issue