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
Dim sINSC as String
sINSC = CalculINSC("150081505104018", "Jean", #01/08/1950#)
' sINSC = 1541187387477485562488
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’empreinte SHA256 en format numérique (chiffres de 0 à 9).
' Les 64 bits de poids fort de l’empreinte sont convertis en base 10 afin d’obtenir une chaine composée de 20 chiffres.
' Si le nombre obtenu s’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
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.