IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB]Calcul Clé RIB [Trucs & Astuces]


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut [VB]Calcul Clé RIB
    Bonjour,

    Je dois calculer la Clé RIB, j'ai trouvé un algo mais je ne sais pas si c'est le bon.

    J'ai une erreur de dépassement de capacité sur ma cle3 mon ICpt est un nombre sur 11 chiffres

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Function Cle_rib(Banque As String, Guichet As String, Compte As String) As Double
    Dim IBanque, IGuichet, ICpt, Numero_Compte As Double
    Dim cle1, cle2, cle3, clefinale As Double
     
     
     
    IBanque = CDbl(Banque)
    IGuichet = CDbl(Guichet)
    ICpt = CDbl(Compte)
     
     
    cle1 = (IBanque * 8) Mod 97
    cle2 = 97 - ((IGuichet * 15) Mod 97)
    cle3 = 97 - ((ICpt * 3) Mod 97)
     
     
    clefinale = (cle1 + cle2 + cle3) Mod 97
     
    Cle_rib = clefinale
     
    End Function

  2. #2
    120
    120 est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    Points : 62
    Points
    62
    Par défaut
    as tu essayer de déclarer tes variables cle1, cle2, cle3, clefinale en variant?

  3. #3
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Oui en variant et en long mais rien n'a faire tjs dépassement de capacité

    Ma variable Compte contient 11 chiffres

    La je ne comprends pas

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 30
    Points : 29
    Points
    29
    Par défaut
    Essaie sans le "cdbl" (si tu n'as que des chiffres dans ta variable compte, ça devrait marcher)

  5. #5
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Tjs pareil il bloque sur le calcul de ma cle3

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 30
    Points : 29
    Points
    29
    Par défaut
    Et si tu essayais de décomposer ton operation en 3 parties? (une pour chaque calcul) avec des variables de type long (ça devrait suffire)

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Le variant est un type fourre-tout.
    Ici ce sont des entiers.
    Il faut les déclarer en Long (Double sont des rééels)

    + ce petit comseil de MSDN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim x As Long
        x = 2 000 * 365   ' Erreur : Dépassement de capacité
    Afin de contourner le problème, saisissez le nombre comme suit :
     
        Dim x As Long
        x = CLng(2 000) * 365

  8. #8
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Tjs pareil l'erreur sur clé3 avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Function Cle_rib(Banque As String, Guichet As String, Compte As String) As Long
    Dim IBanque, IGuichet, ICpt, Numero_Compte As Long
    Dim cle1, cle2, cle3, clefinale As Long
     
     
     
    IBanque = Banque
    IGuichet = Guichet
    ICpt = Compte
     
     
    cle1 = CLng((IBanque * 8) Mod 97)
    cle2 = CLng(97 - ((IGuichet * 15) Mod 97))
    cle3 = CLng(97 - ((ICpt * 3) Mod 97))
     
     
    clefinale = CLng((cle1 + cle2 + cle3) Mod 97)
     
    Cle_rib = clefinale
     
    End Function
    Et si je fais cela

    c'est ici que cela plante car un long contient un numérique sur 10 chiffres et ma variable à un numérique sur 11

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    C'est incompréhensible.
    Je suis sûr d'avoir gait des CLNG sur des valeurs assez longues.
    Là j'ai le même problème

    Sinon j'ai essauyé cela et ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim i As Long
    Dim j As Double
    Dim x As String
     x = "222333444555666"
     j = CDbl(x)
    Ce qui m'étonne dans la fonction RIB c'est qu'elle ne traite pas les numéro alphanumériques.
    Mais c'est une autre histoire.

  10. #10
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Je ne comprends rien j'ai essayé les changements qu'y m'ont était donné rien a faire j'ai tjs l'erreur de dépassement de capacité.

    Mon algo bloque tjs quand je fait le mod avec un nombre à 11 chiffres!!!

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Est-ce que cela bloque toujours au moment de l'affectation ?
    Si le MOD bloque on peut toujours faire une division puis une multiplication

  12. #12
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Il bloque seulement au moment du calcul de la 3eme clé, j'ai l'impression que le MOD ne veut pas d'un chiffre aussi grand. C'est stupide un modulo peut se faire avec n'importe quel chiffre

    La je pige pas

  13. #13
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Il faut utiliser un Long et non un Double. Mais cela ne resoud pas le problème. Un long est codé sur 4 octets donc le plus grand long que tu puisse avoir est :

    2^31-1 = 2 147 483 647

    Si tu veux gérer des nombres plus grands il faut mettre en place un mécanisme de gestion de grands nombres...

  14. #14
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    OK mais comment?

    C vrai que je multiplie un nombre à 11 chiffres par 3

  15. #15
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Il faut utiliser un Long et non un Double
    C'est ce que j'ai dit plus haut.
    Le problème c'est que lorsque l'on fait un cLNG pour convertir cela bloque.
    Je suis pourtant certain de l'avoir déjà fait.

    Le double permettait d'éviter ce problème

  16. #16
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Double ou Long cela donne tjs un bug

  17. #17
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Tu risque d'avoir des surprise avec le double. Je ne sais pas comment VB gère les virgules, mais à mon avis la mantise n'est pas fixe...

  18. #18
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    En utilisant les propriété du module sur l'addition et la multiplication, tu devrais t'en sortir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (a + b) mod c = [(a mod c) + (b mod c)] mod c  
    (a * b) mod c = [(a mod c) * (b mod c)] mod c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Public Function CleRib(Banque As String, Agence As String, Compte As String) As String
        Dim Cle1 As Long
        Dim Cle2 As Long
        Dim Cle3 As Long
        Dim B As Long
        Dim A As Long
        Dim C1 As Long
        Dim C2 As Long
        Dim D As Long
        Dim E As Long
     
        If Len(Banque) <> 5 Then Exit Function
        If Len(Agence) <> 5 Then Exit Function
        If Len(Compte) <> 11 Then Exit Function
     
        B = CLng(Banque)
        A = CLng(Agence)
     
        C1 = CLng(Left(Compte, 6))
        C2 = CLng(Right(Compte, 5))
     
        D = (C1 Mod 97) * (100000 Mod 97) + (C2 Mod 97)
        D = D Mod 97
        E = D * (3 Mod 97)
     
        Cle1 = (B * 8) Mod 97
        Cle2 = 97 - (A * 15) Mod 97
        Cle3 = 97 - E Mod 97
     
        CleRib = Format((Cle1 + Cle2 + Cle3) Mod 97, "00")
    End Function

  19. #19
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Ok merci je teste cela de ce pas

  20. #20
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Cela marche impec

    J'ai vais rajouter aussi la gestion des alphanumériques

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul clé rib
    Par Maxence HUBICHE dans le forum Contribuez
    Réponses: 1
    Dernier message: 06/10/2016, 06h47
  2. [LibreOffice][Tableur] Calcul clef RIB et IBAN
    Par vandman dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 24/03/2015, 15h54
  3. Calcule Rib en C#
    Par khadime27 dans le forum C#
    Réponses: 10
    Dernier message: 29/11/2012, 16h30
  4. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo