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

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

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.