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

Algorithmes et structures de données Discussion :

Algo pour les nouveaux numéros de siren/siret


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut Algo pour les nouveaux numéros de siren/siret
    Bonjour, j'ai un algo qui vérifie mathématiquement les numéro de siren.
    J'ai récemment recréé une entreprise et l'urssaf m'a envoyé un numéro bizarre de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CCCCCCCLCC
    C : Chiffre et L:Lettre
    Du coup mon algo ne fonctionne plus pour ce type de numéro, savez vous comment on peut vérifier ce genre de numéro ?

    Merci.

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par stc074 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CCCCCCCLCC
    C : Chiffre et L:Lettre
    savez vous comment on peut vérifier ce genre de numéro ?
    Veux tu vérifier la forme que tu viens de donner (7 chiffres, une lettre, puis 2 chiffres) ?
    Si oui, tu considères ton numéro comme une chaine de caractères, puis tu essaies de transformer chaque lettre en numéro. La fois où tu n'y arrives pas c'est la lettre et il ne te reste plus qu'à vérifier l'organisation.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Veux tu vérifier la forme que tu viens de donner (7 chiffres, une lettre, puis 2 chiffres) ?
    Si oui, tu considères ton numéro comme une chaine de caractères, puis tu essaies de transformer chaque lettre en numéro. La fois où tu n'y arrives pas c'est la lettre et il ne te reste plus qu'à vérifier l'organisation.
    Bonjour merci pour ta réponse, voici mon algo (en java) :
    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 boolean isSiren(String number) {
            boolean flag;
            Pattern pattern = Pattern.compile("^[0-9]{9}$");
            Matcher matcher = pattern.matcher(number);
            if (!matcher.matches()) {
                flag = false;
            } else {
                //
                int sum = 0;
                for (int i = 8; i >= 0; i--) {
                    int value = Integer.parseInt("" + number.charAt(i));
                    if (((i + 1) % 2) == 0) {
                        value *= 2;
                    }
                    if (value >= 10) {
                        value -= 9;
                    }
                    sum += value;
                }
                flag = ((sum % 10) == 0);
            }
            return flag;
        }
    Si je renseigne les 9 numéros sans la lettre, mon test ne passe pas.

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Tu ne fais aucun test sur la longueur de la chaine.
    De plus, parseInt retourne une exception lorsque l'opération échoue, il te faut donc l'attraper lors de l'analyse de la lettre.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Tu ne fais aucun test sur la longueur de la chaine.
    De plus, parseInt retourne une exception lorsque l'opération échoue, il te faut donc l'attraper lors de l'analyse de la lettre.
    j'ai changé ma méthode :
    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 boolean isSiren(String number) {
            boolean flag;
            if (number.length()!=9) {
                flag = false;
            } else {
                //
                int sum = 0;
                for (int i = 8; i >= 0; i--) {
                    try {
                    int value = Integer.parseInt("" + number.charAt(i));
                    if (((i + 1) % 2) == 0) {
                        value *= 2;
                    }
                    if (value >= 10) {
                        value -= 9;
                    }
                    sum += value;
                    } catch(NumberFormatException ex) { }
                }
                flag = ((sum % 10) == 0);
            }
            return flag;
        }
    Je teste la longueur (9 pour un SIREN) et chope l'exception, mais mon test ne passe pas avec les 9 premiers caractères de mon Siret.
    Merci.

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Ton code est très étrange.
    Il te faut deux étapes : avant et après la lettre.
    De plus, pourquoi faire le test "if (value >= 10)" ? Tu ne convertis qu'un seul digit, donc tu ne peux avoir qu'une valeur inférieure à 10.
    Et tu ne vérifies nulle part la position de la lettre.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  7. #7
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Ton code est très étrange.
    Il te faut deux étapes : avant et après la lettre.
    De plus, pourquoi faire le test "if (value >= 10)" ? Tu ne convertis qu'un seul digit, donc tu ne peux avoir qu'une valeur inférieure à 10.
    Et tu ne vérifies nulle part la position de la lettre.
    La position de la lettre est donnée par i, et value peut être >= 10, en effet on la multiplie par 2, le code il vient d'un algo mais en fait j'ai l'impression qu'il ne fonctionne pas avec les nouveaux numéros c'est surtout ça mon problème.
    Merci.

  8. #8
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    I parcourt toutes les positions, il ne pointe sur rien de spécifique.
    Je te conseille vivement de reprendre le code à la base, car celui-là ne risque pas de fonctionner tel quel.
    Il suffit de :
    - vérifier la longueur de la chaine.
    - parcourir n1 digit avant la lettre
    - trouver la lettre à la bonne position, elle sera détectée par l'exception.
    - finir de traiter la chaine de caractères (les digits restants).
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  9. #9
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    En fait je crois que c'est l'urssaf qui a fait une erreur en me communiquant un siret farfelu, c'est une recréation d'entreprise et si je teste sur le site de linsee avec mon ancien siren ça donne bien les informations de mon entreprise (avec la date de la re-création)

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

Discussions similaires

  1. Algo pour les recommandées de La Poste
    Par jorix dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 01/03/2007, 10h45
  2. fonction bioskey pour les nouveaux ordinateurs ?
    Par as-de-trefle dans le forum C
    Réponses: 3
    Dernier message: 19/01/2007, 11h25

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