(console) trouver la clef d'un code insee en donnant ses 13 premiers chiffres

Soyez le premier à donner votre avis sur cette source.

Vue 6 041 fois - Téléchargée 366 fois

Description

Un code INSEE est composé de 15 caractères.
Les 13 premiers sont directement liés à certains caractères de la personne qui le possède :
Le 1er chiffre indique le sexe de la personne : 1 pour les hommes et 2 pour les femmes.
Les 2ème et 3ème chiffres indiquent l’année de naissance de la personne.
Les 4ème et 5ème chiffres indiquent le mois de naissance de la personne.
Les 6ème et 7ème chiffres indiquent le numéro du département de naissance de la personne.
Les 8ème, 9ème et 10ème chiffres répertorient la commune de naissance de la personne.
Les 11ème, 12ème et 13ème chiffres sont ceux de l’ordre d’inscription sur le registre d’état Civil.

(source http://maths-sciences.fr/documents/divers/insee.pdf)
Les deux derniers chiffres sortent d'une opération mathématique dont la formule est la suivante :

97 - (INSEE % 97)
(INSEE = code INSEE entré dans l'application sans la clef, c'est ce que l'on recherche !)

C'est mon second code source en C#, je n'ai pas du tout l'habitude de manipuler des types de données (le typage est très faible en PHP...).
Toute remarque (constructive bien sur !) est encouragée (et appréciée d'avance !) :)

Source / Exemple :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace in_C
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            string INSEE;
            long INSEE_STR;
            Console.WriteLine("==== VERIFICATION DE NUMERO INSEE ====\n");
            Console.Write("Veuillez entrer le numéro INSEE à vérifier : ");
            INSEE = Console.In.ReadLine();
           

           if (Int64.TryParse(INSEE, out INSEE_STR) == false){
	                Console.WriteLine("ERREUR : impossible de convertir votre chaine en entier.");
                    Console.WriteLine("NOTE : Le numéro INSEE doit être composé de 13 digits.");
                    Console.WriteLine("Impossible de continuer.");
                    Console.ReadLine();
            }

            if (INSEE.Length != 13)
            {
                Console.WriteLine("ERREUR : Le numéro entré n'est pas un INSEE valable.");
                Console.WriteLine("Impossible de continuer.");
                Console.ReadLine();
            }
            else

                if ((INSEE.Substring(0, 1) == "1") || (INSEE.Substring(0, 1) == "2"))
                {

                int mois = Convert.ToInt32(INSEE.Substring(3, 2));

                if (mois <= 0 || mois > 12)
                {
                    Console.WriteLine("ERREUR : le mois (4e et 3e chiffres) est faux. Indiqué : " + mois + ".");
                    Console.ReadLine();
                }
                else
                {
                    long modulo = INSEE_STR % 97;
                    long clef = 97 - modulo;
                    string first = INSEE.Substring(0, 1);
                    string second = INSEE.Substring(1, 2);
                    string third = INSEE.Substring(3, 2);
                    string fourth = INSEE.Substring(5, 2);
                    string fifth = INSEE.Substring(7, 3);
                    string sixth = INSEE.Substring(10, 3);

                    Console.WriteLine("SUCCES : La clef du numéro INSEE donné est " + clef + ".");
                    Console.WriteLine("INFO : Numéro INSEE donné complété : " + first + "-" + second + "-" + third + "-" + fourth + "-" + fifth + "-" + sixth + "-" + clef);
                    Console.WriteLine();
                    Console.Write("Souhaitez-vous que cet INSEE complété soit placé dans votre presse-papier ?\nAucun tiret ne sera ajouté n/y : ");
                    string clpbrd = Console.In.ReadLine();
                    if (clpbrd == "y")
                    {
                        Clipboard.SetText(first + second + third + fourth + fifth + sixth + clef);
                        Console.WriteLine("OK");
                    }

                    Console.ReadLine();

                }              

                }
                else
                {
                    Console.WriteLine("ERREUR : le premier chiffre " + INSEE.Substring(0, 1) + " est faux.");
                    Console.WriteLine("NOTE : le premier chiffre correspond au sexe de la personne possédant le code.");
                    Console.WriteLine("Impossible de continuer.");
                    Console.ReadLine();

                }
                    

            }
        }
    }

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
120
Date d'inscription
lundi 26 février 2007
Statut
Membre
Dernière intervention
7 octobre 2011

Bonjour,

Je ne connais pas C#, mais il est super facile de comprendre ce code (qui n'est pas très compliqué en soit). Les variables sont bien nommées, le code est plutôt propre. J'ai eu un petit sourire en voyant qu'on pouvais copier le résultat dans le presse-papier :)

Bon, ça ne casse pas des briques, et c'est vrai que ça aurais plus ça place dans les snippets, cependant, c'est du bon code.
Attention tout de même:

- Quelques erreurs d'indentations
- Des ligne vide qui pourraient être supprimée

Sinon, rien à dire.
Messages postés
14842
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
22 octobre 2020
92
Maxime,
En postant une source, on s'attend à recevoir des critiques, positives ou négatives, de la part de ses pairs ;) Ce serait dommage de se laisser abattre dès la 1ère remarque négative, non? Tout le monde passe par là (pour moi, par exemple, c'était ici: http://www.cppfrance.com/codes/SUPPRIMER-CHAINE-CARACTERES-FICHIER_33695.aspx).

Pour information, codyx.org regroupe des snippets, ou bout de code, bien utiles et facilement intégrable dans un développement. Une source est un développement plus abouti, qui fait un peu plus de choses qu'un "hello world". Ce que tu as posté aurait plutôt sa place sur Codyx. D'où le message de Seb, et le mien.

En évolution, tu peux par exemple encapsuler ton code dans une classe dédiée, que tu appelerais après saisie de l'utilisateur via boite de dialogue...
Messages postés
20
Date d'inscription
mercredi 21 juillet 2010
Statut
Membre
Dernière intervention
17 janvier 2012

J'avais fait la même chose étant étudiant mais à l'époque on me l'avait demandé en C/C++ et on avait pas la partie presse-papier à implémenter.
Messages postés
1
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
12 septembre 2011

@sebmafate : oui, tout ça pour un %97.
Mais bon, j'ose penser qu'on peut pardonner toute cette verbose, pour un jeune étudiant apprenant le C# ?

@Buno : effectivement, je ferai plus attention ultérieurement (si je reposte bien sur, l'accueil de sebmafate laisse à désirer).
Désolé.

@Piergel : oui, j'ai pensé la même chose... j'ai corrigé ma version en local :)
Merci ;)
Messages postés
51
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
18 août 2009

Ce code n'est pas inintéressant a priori (je n'ai pas le temps de le tester).
Juste un détail : le titre devrait plutôt être "Trouver la clé d'un numéro de sécu en donnant ses 13 premiers chiffres". En effet des codes INSEE il y en a plein : outre le numéro d'inscription au répertoire des personnes physiques (NIR - n° de sécurité sociale) on trouvera par exemple le code officiel géographique (COG - utilisé d’ailleurs sur les 8eme, 9eme et 10eme chiffres du numéro de sécu pour coder la commune de naissance), les SIREN, SIRET, APE...
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.