Wiki source code of Modulo 97 d'un IBAN

Last modified by Francis Longhitano on 2012/02/17 23:10

Show last authors
1 Ce code permet de faire le calcul du modulo 97 pour un code IBAN.
2 Le code IBAN en entrée est déjà au format numérique et ce après remplacement des caractères dans la chaîne initiale par les valeurs de substitution.
3
4 Avec l'exemple ci-dessous, le modulo résultant doit fournir la valeur '03'.
5
6 Le programme fait appel à une fonction VBScript pour réaliser le calcul.
7
8
9
10 {{code title="DECL" language="none"}}
11 ALPHA(36) W_IBAN_A /* Valeur en entrée
12 ALPHA(2) R_CLE_IBAN /* Valeur en retour
13
14 ALPHA(36) ParamS
15 NUM_BIN_4 NbElts
16 NUM_BIN_4 CodeRetour
17 NUM_BIN_4 Indice
18 NUM_BIN_4 Wlg_Chaine
19
20 {{/code}}
21
22
23
24 {{code title="INIT_PGM" language="none"}}
25 W_IBAN_A = '37100110002007502831333159152700'
26
27
28 CHARGER_DLL 'VaToCom'
29 * Initialisation de la DLL (un seul appel est utile)
30 APPELER_DLL 'VaToCom' 'Initialize' CodeRetour
31
32 * Chargement du script
33 APPELER_DLL 'VaToCom' 'AddScript' 'Calculmodulo.vbs' CodeRetour
34
35 * Indication du nombre de paramètres d’entrée
36 APPELER_DLL 'VaToCom' 'CreateParameters' 1 CodeRetour
37
38 * Remplissage des paramètres d’entrée
39 ParamS = W_IBAN_A
40 APPELER_DLL 'VaToCom' 'SetStringParameter' 0 ParamS CodeRetour
41
42 * Exécution d’une fonction contenue dans le script
43 APPELER_DLL 'VaToCom' 'Execute' 'Calcul' CodeRetour
44
45 * Récupération de la taille du tableau global
46 APPELER_DLL 'VaToCom' 'GetParameterSize' -1 NbElts CodeRetour
47
48 * Récupération des éléments du tableau
49 Indice = 0
50 TANT_QUE Indice < NbElts
51
52 * Récupération élément du tableau
53 Wlg_Chaine = 2
54 APPELER_DLL 'VaToCom' 'GetStringParameter' Indice 0 R_CLE_IBAN Wlg_Chaine CodeRetour
55
56 Indice = Indice + 1
57
58 REFAIRE
59
60 DECHARGER_DLL 'VaToCom'
61
62 TERMINER
63
64 {{/code}}
65
66
67
68 Le fichier vbs doit être positionné avec les objets "client" afin de pouvoir être appelé par le programme.
69
70
71 {{code title="Calculmodulo.vbs" language="none"}}
72 '*********************************************************************
73 '
74 ' HARDIS - Calcul Moudlo 97 d'un IBAN VBScript - 2012
75 '
76 '*********************************************************************
77 '
78 Option Explicit 'All variables have to be declared before use
79 '
80 ' Global Declare
81 Dim TreturnValue() 'Output array
82 '
83 '
84 '*********************************************************************
85 '
86 '
87 '*********************************************************************
88 Dim tConcat
89 Dim in_i
90 '
91 Dim sRetenue
92 Dim sCle
93 Dim iNbInterm
94 Dim sStrInterm
95 '
96 Dim iCodeNum
97 Dim sCodeStr
98 '
99 Dim tIBAN
100 '
101 Dim maval
102 '
103 Public Function Calcul(siban)
104 Calcul = ""
105 sRetenue = ""
106 sStrInterm = ""
107 in_i = 1
108 iNbInterm = 0
109 sCle = 0
110 iCodeNum = 0
111 '
112 tConcat = siban
113 '
114 Do While in_i <= Len(tConcat)
115 '
116 If in_i = 1 Then
117 sStrInterm = sRetenue & Mid(tConcat, in_i, 9)
118 Else
119 sStrInterm = sRetenue & Mid(tConcat, in_i, 7)
120 End If
121 '
122 iNbInterm = CDbl(sStrInterm)
123 '
124 sCle = CalculateModulo(iNbInterm, 97)
125 '
126 sRetenue = CStr(sCle)
127 '
128 If in_i = 1 Then
129 in_i = in_i + 9
130 Else
131 If sCle < 10 Then
132 in_i = in_i + 8
133 Else
134 in_i = in_i + 7
135 End If
136 End If
137 '
138 Loop
139 '
140 iCodeNum = 98 - CalculateModulo(sCle, 97)
141 '
142 If iCodeNum < 10 Then
143 sCodeStr = "0" & CStr(iCodeNum)
144 Else
145 sCodeStr = CStr(iCodeNum)
146 End If
147 '
148 Calcul = sCodeStr
149 Exit Function
150 End Function
151
152 Function CalculateModulo(x, y)
153 CalculateModulo = x - (Int(x / y) * y)
154 End Function
155
156
157 {{/code}}
158