Calcul insc / ins-c

Soyez le premier à donner votre avis sur cette source.

Vue 5 290 fois - Téléchargée 166 fois

Description

Calcul de l'INS-C sensé remplacer notre Numéro de Sécurité Sociale (aussi appelé Numéro INSEE).

Ce code a été conçu d'après la doc de l'ASIP Santé, document révisé du 30/10/2009.
Voici une page avec quelques informations :
http://esante.gouv.fr/referentiels/identification/ins-faq
                • UTILISATION ********

Dim sINSC as String
sINSC = CalculINSC("150081505104018", "Jean", #01/08/1950#)
' sINSC = 1541187387477485562488
                • VERIFICATION *********

Vous pouvez vérifier le bon fonctionnement de ce code sur ce site :
http://www.coweb.fr/ins-c/
ATTENTION : l'année de la date y est sur 2 chiffres !
A noter aussi qu'il ne semble pas correctement fonctionner avec tous les caractères accentués dans le prénom, le navigateur ayant peut-être un rôle à jouer dans ce problème...

Source / Exemple :


Imports System.Text
Imports System.Security.Cryptography

Module ModuleINSC
    Public Function SHA256_Encrypt(Txt As String) As String

        Dim sha As New SHA256Managed()
        Dim ae As New ASCIIEncoding()
        Dim Hash() As Byte = sha.ComputeHash(ae.GetBytes(Txt))
        Dim sb As New StringBuilder(Hash.Length * 2)
        Dim ndx As Integer

        For ndx = 0 To Hash.Length - 1
            sb.Append(Right("0" & Hex(Hash(ndx)), 2))
        Next
        Return sb.ToString

    End Function

    Public Function CalculINSC(ByVal sNIR As String, ByVal sPrenoms As String, ByVal dNaissance As Date) As String
        Dim sNIRsansCle As String
        Dim sPrenomsNormalises As String
        Dim sNaissance As String
        Dim sGraine As String
        Dim sGraineHachee As String

        Dim sTemp As String

        CalculINSC = ""

        ' Normalisation des prénoms
        sPrenomsNormalises = sPrenoms
        sPrenomsNormalises = Trim(sPrenomsNormalises).Replace(" ", "")
        sPrenomsNormalises = sPrenomsNormalises.PadRight(10).Substring(0, 10) '(sPrenomsNormalises & Space(10)).Substring(0, 10)
        sTemp = ""
        For Each car In sPrenomsNormalises
            Select Case car
                Case "À"c, "Á"c, "Â"c, "Ã"c, "Ä"c, "Å"c, "Æ"c, "à"c, "á"c, "â"c, "ã"c, "æ"c, "ä"c, "å"c
                    sTemp = sTemp & "A"
                Case "È"c, "É"c, "Ê"c, "Ë"c, "è"c, "é"c, "ê"c, "ë"c
                    sTemp = sTemp & "E"
                Case "Ð"c, "ð"c
                    sTemp = sTemp & "D"
                Case "Ò"c, "Ó"c, "Ô"c, "Õ"c, "Ö"c, "Ø"c, "ò"c, "ó"c, "ô"c, "õ"c, "ö"c, "ø"c
                    sTemp = sTemp & "O"
                Case "Ý"c, "ý"c, "ÿ"c, "Ÿ"c
                    sTemp = sTemp & "Y"
                Case "Ç"c, "ç"c
                    sTemp = sTemp & "C"
                Case "Ì"c, "Í"c, "Î"c, "Ï"c, "ì"c, "í"c, "î"c, "ï"c
                    sTemp = sTemp & "I"
                Case "Ñ"c, "ñ"c
                    sTemp = sTemp & "N"
                Case "Ù"c, "Ú"c, "Û"c, "Ü"c, "ù"c, "ú"c, "û"c, "ü"c
                    sTemp = sTemp & "U"
                Case "ß"c
                    sTemp = sTemp & "B"
                Case "Š"c, "š"c
                    sTemp = sTemp & "S"
                Case "Ţ"c, "ţ"c
                    sTemp = sTemp & "Z"
                Case Else
                    sTemp = sTemp & car
            End Select
        Next
        sPrenomsNormalises = sTemp.ToUpper
        sTemp = ""
        For Each car In sPrenomsNormalises
            If Asc(car) < 65 Or Asc(car) > 91 Then
                sTemp = sTemp & " "
            Else
                sTemp = sTemp & car
            End If
        Next
        sPrenomsNormalises = sTemp

        ' Normalisation de la date de naissance
        sNaissance = (dNaissance.Year.ToString.Substring(2).ToString.PadRight(2) & dNaissance.Month.ToString.PadLeft(2) & dNaissance.Day.ToString.PadLeft(2)).Replace(" ", "0")

        ' Normalisation du NIR
        sNIRsansCle = sNIR.Substring(0, 13)

        ' Concaténation
        sGraine = sPrenomsNormalises & sNaissance & sNIRsansCle

        ' Hashage
        sGraineHachee = SHA256_Encrypt(sGraine)

        ' Conversion de l&#8217;empreinte SHA256 en format numérique (chiffres de 0 à 9).
        ' Les 64 bits de poids fort de l&#8217;empreinte sont convertis en base 10 afin d&#8217;obtenir une chaine composée de 20 chiffres.
        ' Si le nombre obtenu s&#8217;exprime sur moins de 20 chiffres, il est complété à gauche par des zéros.
        sGraineHachee = sGraineHachee.Substring(0, 16)
        Dim iINS As ULong = ULong.Parse(sGraineHachee, System.Globalization.NumberStyles.HexNumber)
        Dim iCle As Integer = System.Convert.ToInt16(97 - (iINS Mod 97))
        CalculINSC = (iINS.ToString & iCle.ToString).PadLeft(22).Replace(" ", "0")
    End Function

End Module

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
44
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
20 novembre 2008

Ce numéro INS-C fait partie des éléments nécessaires pour constituer le Dossier Médical Personnel (appelé aussi DMP).

N'ayant trouvé ce code nulle part, j'ai décidé de le fabriquer ;-)
Messages postés
14955
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 janvier 2021
93
:O
Autant pour moi, effectivement.
Messages postés
44
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
20 novembre 2008

Ceci dit, c'est très drôle, je n'avais pas fait gaffe que, dit rapidement, on "entendait" la même chose : INS-C / INSEE !!
Messages postés
44
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
20 novembre 2008

LOL, et avant de faire des remarques, on s'informe !

Le numéro INS-C est le nouveau numéro dont le calcul a été défini par l'ASIP Santé.

Rien à voir avec le numéro INSEE (Numéro de Sécurité Sociale ou N° SS)...
Messages postés
14955
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 janvier 2021
93
Hello,
On dit INSEE et non INS-C et encore moins INSC

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.