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