Ce code permet de faire le calcul du modulo 97 pour un code IBAN.
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.
Avec l'exemple ci-dessous, le modulo résultant doit fournir la valeur '03'.
Le programme fait appel à une fonction VBScript pour réaliser le calcul.
DECL
ALPHA(36) W_IBAN_A /* Valeur en entrée ALPHA(2) R_CLE_IBAN /* Valeur en retour ALPHA(36) ParamS NUM_BIN_4 NbElts NUM_BIN_4 CodeRetour NUM_BIN_4 Indice NUM_BIN_4 Wlg_Chaine
INIT_PGM
W_IBAN_A = '37100110002007502831333159152700' CHARGER_DLL 'VaToCom' * Initialisation de la DLL (un seul appel est utile) APPELER_DLL 'VaToCom' 'Initialize' CodeRetour * Chargement du script APPELER_DLL 'VaToCom' 'AddScript' 'Calculmodulo.vbs' CodeRetour * Indication du nombre de paramètres d’entrée APPELER_DLL 'VaToCom' 'CreateParameters' 1 CodeRetour * Remplissage des paramètres d’entrée ParamS = W_IBAN_A APPELER_DLL 'VaToCom' 'SetStringParameter' 0 ParamS CodeRetour * Exécution d’une fonction contenue dans le script APPELER_DLL 'VaToCom' 'Execute' 'Calcul' CodeRetour * Récupération de la taille du tableau global APPELER_DLL 'VaToCom' 'GetParameterSize' -1 NbElts CodeRetour * Récupération des éléments du tableau Indice = 0 TANT_QUE Indice < NbElts * Récupération élément du tableau Wlg_Chaine = 2 APPELER_DLL 'VaToCom' 'GetStringParameter' Indice 0 R_CLE_IBAN Wlg_Chaine CodeRetour Indice = Indice + 1 REFAIRE DECHARGER_DLL 'VaToCom' TERMINER
Le fichier vbs doit être positionné avec les objets "client" afin de pouvoir être appelé par le programme.
Calculmodulo.vbs
'********************************************************************* ' ' HARDIS - Calcul Moudlo 97 d'un IBAN VBScript - 2012 ' '********************************************************************* ' Option Explicit 'All variables have to be declared before use ' ' Global Declare Dim TreturnValue() 'Output array ' ' '********************************************************************* ' ' '********************************************************************* Dim tConcat Dim in_i ' Dim sRetenue Dim sCle Dim iNbInterm Dim sStrInterm ' Dim iCodeNum Dim sCodeStr ' Dim tIBAN ' Dim maval ' Public Function Calcul(siban) Calcul = "" sRetenue = "" sStrInterm = "" in_i = 1 iNbInterm = 0 sCle = 0 iCodeNum = 0 ' tConcat = siban ' Do While in_i <= Len(tConcat) ' If in_i = 1 Then sStrInterm = sRetenue & Mid(tConcat, in_i, 9) Else sStrInterm = sRetenue & Mid(tConcat, in_i, 7) End If ' iNbInterm = CDbl(sStrInterm) ' sCle = CalculateModulo(iNbInterm, 97) ' sRetenue = CStr(sCle) ' If in_i = 1 Then in_i = in_i + 9 Else If sCle < 10 Then in_i = in_i + 8 Else in_i = in_i + 7 End If End If ' Loop ' iCodeNum = 98 - CalculateModulo(sCle, 97) ' If iCodeNum < 10 Then sCodeStr = "0" & CStr(iCodeNum) Else sCodeStr = CStr(iCodeNum) End If ' Calcul = sCodeStr Exit Function End Function Function CalculateModulo(x, y) CalculateModulo = x - (Int(x / y) * y) End Function