Validité compte IBAN

vins1892

XLDnaute Nouveau
Bonjour à tous,

je souhaite vérifier la structure de compte IBAN dans notre base de données.

Dans Excel, la fonction MOD ne permet pas d'effectuer des calculs sur des nombres aussi grands (le calcul me ramène #NOMBRE).

Pour contourner cela, je découpe le nombre et ensuite divise par 97:

Exemple de compte à valider: FR76 30004 00892 00010114009 21

Devient 30004 00892 00010114009 21 FR76

F = 15 et R = 27.

Mon nombre est 30004008920001011400921152776

Je prends les 9 ers chiffres 300040089 divisé par 97 = reste 68

Je prends le reste de la division et le colle au 7 chiffres suivants:
680001011 divisé par 97 = reste 68.

Idem pour les 7 suivants:
684009211 divisé par 97 = reste 34

Idem pour les suivants:
3452776 divisé par 97 = reste 61

Et 98 - 61 = 37 alors que les deux derniers chiffres de l'IBAN sont 21

Quelqu'un peut-il m'aider ou à débelopper une fonction qui permet de faire ce contôle? Ou m'expliquer comment faire fonctionner la fonction MODULO 97 sur un grand nombre?
Ou me suis-je peut-être tromper dans les formules ...

Merci pour votre aide.
 

david84

XLDnaute Barbatruc
Re : Validité compte IBAN

Bonjour tout le monde,
@pierrejean : au cas où cela peut te servir, ci-joint une fonction RegExp te permettant de contrôler la syntaxe de la chaîne de caractères selon les explications fournies par ton lien :
Composition de l'IBAN
2 lettres 2 chiffres 30 positions
CP CC BBAN

CP : Code du pays
CC : Clef de contrôle (de 02 à 98 )
BBAN : Basic Bank Account Number
L'IBAN comprend 34 caractères au maximum et a une longueur, fixe dans chaque pays, supérieure à 14 caractères.
Ainsi, si la syntaxe n'est pas correcte, la suite du traitement n'est pas effectuée et l'on renvoie FAUX.

La fonction ControleIban deviendrait donc :
Code:
Function ControleIban(LeNumIban As String) As Boolean
Dim x As String
LeNumIban = Replace(LeNumIban, " ", "")
If Syntaxe(LeNumIban, "^[A-Z]{2}(0[2-9]|[1-8]\d|9[0-8])[A-Z0-9]{11,30}$") = True Then
    LeNumIban = Right(LeNumIban, Len(LeNumIban) - 4) & Left(LeNumIban, 4)
    n = 1
    While n <= Len(LeNumIban)
      x = Mid(LeNumIban, n, 1)
     If Not IsNumeric(x) Then
       LeNumIban = Replace(LeNumIban, x, convIBAN(x), 1, 1)
     End If
      n = n + 1
    Wend
    iban = Mod97(LeNumIban)
    If iban = 1 Then
      ControleIban = True
    Else
      ControleIban = False
    End If
End If
End Function

La fonction de contrôle syntaxique est :
Code:
Function Syntaxe(LeNumIban As String, Motif As String) As Boolean
  Set obj = CreateObject("vbscript.regexp")
  obj.Pattern = Motif
  If obj.Test(LeNumIban) Then Syntaxe = True
End Function

Tout cela est bien entendu à valider (sur le principe) de ton côté et éventuellement à tester plus avant.
A+
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Validité compte IBAN

Merci David

Comme je n'ai toujours rien compris au regexp , je te fais confiance
Je testerai sur les numeros que je connais , à moins que tu ne l'ai deja fait
Et nous attendrons des nouvelles des eventuels utilisateurs
 

david84

XLDnaute Barbatruc
Re : Validité compte IBAN

Bonjour pierrejean

la question est de savoir s'il peut exister une possibilité pour qu'une chaîne de caractère non valide (par exemple possédant une clé de contrôle de 01 ou 99, ou une chaîne de caractère inférieure à 15 ou supérieure à 34) a une chance quelconque d'être tout de même validée par Mod 97 du fait d'un appariement aléatoire avec le CP et le BBAN.

Si cela est impossible, alors ma proposition de validation syntaxique ne sert à rien (tout au plus à gagner du temps puisque une syntaxe non validée met fin au traitement mais est-ce significatif ?).

Si par contre le risque - aussi minime soit-il - peut potentiellement exister, alors ce type de chaîne sera invalidé d'entrée par la fonction Syntaxe.

Je n'ai pas la réponse à cette question, donc à toi de voir.

Concernant le RegExp, si cela t'intéresse d'avoir quelques explications, je suis à ta disposition.
A+
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Validité compte IBAN

Re

On peut parfaitement imaginer qu'un chiffre en lieu et place d'une lettre avec modification d'un ou plusieurs chiffres /lettres dans BBAN conduise a un mod97 correct
Par consequent ta proposition est un plus bien réel dans le contrôle
Des que j'aurais une minute je reprendrais le fichier dans ce sens ( si tu ne l'a pas fait entre temps, ce qui ne serait pas mal non plus !!! )
 

Statistiques des forums

Discussions
312 453
Messages
2 088 551
Membres
103 881
dernier inscrit
malbousquet