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

C# Discussion :

Calcule Rib en C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Informaticien
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations professionnelles :
    Activité : Informaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Par défaut Calcule Rib en C#
    Bonjour je veux réaliser une fonction qui retourne le clé RIB voila ce que j'ai fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void CalculeCleRib(string codeBanque, string codeGuichet, string numCompte)
            {
                codeBanque.ToUpper().Replace("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "12345678912345678923456789");
                Int64 cleRIB = 97 - ((89 * int.Parse(codeBanque) + 15 * int.Parse(codeAgence) + 3 * long.Parse(numeroCompte)) % 97);
            }
    Mais ça ne donne pas un le bon résultat. J'ai trouvé ce formule sur Wiki.
    Si quelqu'un a déjà travaillé sur ce problème merci de m'aider.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Il y a déjà eu une solution postée à ce sujet, sur ce forum. Tu pourras la trouver en suivant ce lien : http://www.developpez.net/forums/d56...ithme-cle-rib/

    [EDIT]OUPS, j'ai posté trop vite .. Ca ne permet pas de calculer la clé rib, mais suite à la réponse de Bluedeep ci-après, tu peux utiliser la méthode RibLetterToDigit (voir le premier post de Tomlev sur le lien) afin de remplacer les lettres par les bonnes valeurs.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre averti
    Informaticien
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations professionnelles :
    Activité : Informaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Par défaut
    RibLetterToDigit (voir le premier post de Tomlev sur le lien) afin de remplacer les lettres par les bonnes valeurs.[/QUOTE]
    J'ai suivi ton conseil et c'est bon pour le remplacement mais par contre c'est la formule que je comprend pas.
    Merci a tous pour avoir réagit aussi vite. Mais comme suis pas fort j'attend toujours votre aide.

  4. #4
    Membre averti
    Informaticien
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations professionnelles :
    Activité : Informaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Par défaut
    Ban en faite j'ai une solution qui marche en PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function calculerCleRib($sNumeroCompte)  
    {   
     
        $sNumeroCompte = strtr(strtoupper($sNumeroCompte), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','12345678912345678923456789');
        //le rib saisi
        $ribCompte = substr($sNumeroCompte, -2);   
        //recuperation du numéro de compte
        $NumeroCompte22 = substr($sNumeroCompte, 0, -2);
        $CleRib = bcsub('97', bcmod(bcmul($NumeroCompte22 , 100), '97'));
        $CleRib = str_repeat("0",max(0,2-strlen($CleRib))).$CleRib;
     
        return $CleRib ;
      }
    En conversant en C# ça donne un truc du genre

    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
     
     public static double GetCleRib(string chaine)
            {
                long cle = 0;
     
     
                // Remplacement des lettres par des chiffres dans le numéro de compte
                StringBuilder sb = new StringBuilder();
                foreach (char ch in chaine.ToUpper())
                {
                    if (char.IsDigit(ch))
                        sb.Append(ch);
                    else
                        sb.Append(RibLetterToDigit(ch));
                }
                chaine = sb.ToString();
                string cleRib = chaine.Substring(chaine.Length-2, 2);
                string numcompte = chaine.Substring(0, chaine.Length - 2);
                long numCompte = long.Parse(numcompte);
                cle = 97 - (97 % (numCompte * 100));
     
                return cle;
            }
    mais le problème c'est que les entier de type long ne peuvent pas contenir des nombre de 22 chiffres.
    Que me conseil vous?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Octobre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 30
    Par défaut
    Bonjour,

    si je puis me permettre, voici une classe RIB qui peut t'aider...
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
     
    namespace GestionLMB.Model
    {
        public class Rib
        {
            public int codeBanque { get; set; }
            public int codeGuichet { get; set; }
            public string numCompte { get; set; }
            public int clefRib { get; set; }
            public string banque { get; set; }
     
            /// <summary>
            /// Instancie un Rib, qui sera rattaché à un client ou à un Site.
            /// </summary>        
            /// <param name="codeBanque">int</param>
            /// <param name="codeGuichet">int</param>
            /// <param name="numCompte">string</param>
            /// <param name="cleRib">int</param>
            /// <param name="banque">string</param>
            public Rib(int codeBanque, int codeGuichet, string numCompte, int clefRib, string banque)
            {            
                this.codeBanque = codeBanque;
                this.codeGuichet = codeGuichet;
                this.numCompte = numCompte;
                this.clefRib = clefRib;
                this.banque = banque;
            }
     
            /// <summary>
            /// Vérifie la validité d'un RIB
            /// </summary>
            /// <param name="rib">Rib</param>
            /// <returns>bool</returns>
            public bool IsValidRib()
            {            
                return (this.clefRib == this.getClefRib());
            }
     
            public int getClefRib()
            {
                string numCompte = null;
     
                // Remplacement des lettres par des chiffres dans le numéro de compte
                StringBuilder sb = new StringBuilder();
                foreach (char ch in this.numCompte.ToUpper())
                {
                    if (char.IsDigit(ch))
                        sb.Append(ch);
                    else
                        sb.Append(RibLetterToDigit(ch));
                }
                numCompte = sb.ToString();
     
                // Séparation du numéro de compte pour tenir sur 32bits
                string numCompte_deb = numCompte.Substring(0, 6);
                string numCompte_fin = numCompte.Substring(6, 5);
     
                // Calcul de la clé RIB
                int d = int.Parse(numCompte_deb);
                int c = int.Parse(numCompte_fin);
     
                int calculatedKey = 97 - ((89 * this.codeBanque + 15 * this.codeGuichet + 76 * d + 3 * c) % 97);
     
                return calculatedKey;
            }
     
            /// <summary>
            /// Convertit une lettre d'un RIB en un chiffre selon la table suivante :
            /// 1 2 3 4 5 6 7 8 9
            /// A B C D E F G H I
            /// J K L M N O P Q R
            /// _ S T U V W X Y Z
            /// </summary>
            /// <param name="c">La lettre à convertir</param>
            /// <returns>Le chiffre de remplacement</returns>
            private char RibLetterToDigit(char letter)
            {
                if (letter >= 'A' && letter <= 'I')
                {
                    return (char)(letter - 'A' + '1');
                }
                else if (letter >= 'J' && letter <= 'R')
                {
                    return (char)(letter - 'J' + '1');
                }
                else if (letter >= 'S' && letter <= 'Z')
                {
                    return (char)(letter - 'S' + '2');
                }
                else
                    throw new ArgumentOutOfRangeException("Le caractère à convertir doit être une lettre majuscule dans la plage A-Z");
            }
        }
    }

  6. #6
    Membre averti
    Informaticien
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations professionnelles :
    Activité : Informaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Par défaut
    Merci d'avoir réagit aussi vite!
    Mais j'ai constaté que votre numero de compte est sur 11 position:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string numCompte_deb = numCompte.Substring(0, 6);
                string numCompte_fin = numCompte.Substring(6, 5);
    Alors que le mien fait 12 chiffres, c'est pourquoi le calcule n'est pas correcte.

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Citation Envoyé par khadime27 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                codeBanque.ToUpper().Replace("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "12345678912345678923456789");
    Cette ligne a la base est fausse : elle n'opére que sur un code banque qui contient la chaine "ABCDEFGHIJKLMNOPQRSTUVWXYZ", ce qui est très très improbable.

    Il faut faire faire un remplacement de A par 1, B par 2, etc .... voir la doc de la méthode Replace dont le fonctionnement n'a visiblement pas été compris; c'est là : http://msdn.microsoft.com/en-us/libr...(v=vs.90).aspx

  8. #8
    Membre émérite Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Par défaut
    Quoi qu'il en soit l'utilisation des Regex serait de toute facon plus appropries, je ne serait pas etonne qu'un regex existe deja.

+ 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. [VB]Calcul Clé RIB
    Par dai.kaioh dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 18/01/2005, 11h09
  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