Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
Modérateur :Vilains modOOs
Règles du forum Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Bonsoir,
Voici deux macros qui peuvent s'avérer utiles pour un contrôle de saisie de coordonnées bancaires ou d'un n° INSEE (souvent appelé n° Sécu).
Les macros calculent la clé des données fournies et la comparaison avec la clé saisie permet de déceler une erreur de saisie, ce qui est fréquent avec des données de plus de 10 chiffres.
REM ***** BASIC *****
Rem '
Rem ' CleRib
Rem ' Calcule la cle d'un releve d'identite bancaire ou postal (RIB/RIP)
Rem '
Function CleRib(Banque As Integer, Guichet As Integer, NumCompte As String) As Integer
r1 = ((Banque Mod 97) * 62) Mod 97
r2 = ((Guichet Mod 97) * 5) Mod 97
r3 = Right("00000000000" & UCase(NumCompte), 11)
MsgErr=""
For i = 1 To 11
lettre = Asc(Mid(r3, i, 1))
SELECT CASE lettre
CASE 48 to 57
r3 = Left$(r3, i - 1) & Chr$(lettre) & Right$(r3, 11 - i) : rem 0-9
CASE 65 to 73
r3 = Left$(r3, i - 1) & Chr$(lettre - 16) & Right$(r3, 11 - i) : rem A-I
CASE 74 to 82
r3 = Left$(r3, i - 1) & Chr$(lettre - 25) & Right$(r3, 11 - i) : rem J-R
CASE 83 to 90
r3 = Left$(r3, i - 1) & Chr$(lettre - 33) & Right$(r3, 11 - i) : rem S-Z
CASE ELSE
MsgErr="Le n° de Compte "& r3 & " contient au moins un caractère invalide"
END SELECT
Next
IF MsgErr="" THEN
r3=Val(r3)
r4 = Fix(r3 / 10000000)
r5 = r3 - r4 * 10000000
r6 = ((r4 Mod 97) * 76) Mod 97
r7 = r5 Mod 97
r8 = ((r1 + r2 + r6 + r7) * 3) Mod 97
CleRib = 97 - r8
ELSE
CleRib=0
MSGBOX(MsgErr)
ENDIF
End Function
Rem '
Rem ' CleSecu
Rem ' Calcule la cle d'un numero de Secu (INSEE)
Rem '
Function CleSecu(NumSecu) As Integer
fort = Fix(NumSecu / 1000000)
faible = NumSecu - (fort * 1000000)
NumSecu = (fort Mod 97) * 1000000 + faible
CleSecu = 97 - (NumSecu Mod 97)
End Function
Bonsoir
je ne suis pas forcément un inconditionnel de la législation, mais il me semble que pour stocker ce type de données dans un fichier informatique, il faille passer par une demande d'autorisation à la CNIL
Cordialement.
Bonjour,
Sortons des propos négatifs...
Comment disposez-vous les chiffres avant l'application de vos macros ?
Plusieurs essais ont déclenché des erreurs dans Open Office Calc...
mais je suis loin d'être experte en macros...
D'avance, merci de votre réponse.
- Code Banque (5 chiffres)
- Code Guichet (5 chiffres)
- No Compte (11 ccaractères)
- Une Clé de RIB (2 chiffres)
Exemple :
Banque 12345
Guichet 01234
N° Compte 1234567Z901
Clé 51
Numéro complet : 12345 01234 1234567Z901
Function CleRib(Banque As Integer, Guichet As Integer, NumCompte As String) As Integer
La fonction attend donc le Code Banque et le code Guichet en Numérique, le numéro de compte en alphanumérique et retourne la clef (en numérique).
cOOordialement
--- AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide... XRay + SDK
--- Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Dude a écrit :Sauf à avoir des codes inférieurs à 32.767, une variable entière ne suffira pas.
Je n'avais même pas fait attention...
Je traite ce genre de données en alpha, ce qui permet de ne pas se préoccuper des 0 non significatifs...
Ajout : Dans le même style de test, on peut vérifier la cohérence d'un numéro de Carte Bancaire :
Verif CB.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
cOOordialement
--- AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide... XRay + SDK
--- Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...