Contributions > 01 - PRG : Programmation > Calculs de clefs et Checksums (rib, iban, ...)
Nº National Belge, Nº Carte d'identité, Nº Carte SIS -Belge
# 0000000227
ajouté le 11/08/2005 16:48:32 et modifié le 19/02/2015
consulté 61822 fois
Niveau
débutant
* Vérification du N0 National Belge * Il est formé de la date de naissance : 6 chiffres Année Mois Jour [AAMMJJ] * Les trois chiffres suivant est le numéro journalier de naissance * Ce nombre est pour les garçons: impair et les filles: pair * Deux chiffres de contrôle * Ce nombre est le complément de 97 du modulo 97 du nombre formé : * - soit par les 9 premiers chiffres du numéro national pour les personnes nées avant le 01/01/2000 * - soit par le chiffre 2 suivi des 9 premiers chiffres du numéro national pour les personnes nées après le 31/12/99 * (Le modulo 97 d'un nombre est le reste de la division du nombre par 97)
*__________________________________________________________________ * Nº carte d'identité ? * il faut en fait calculer le check digit de ce numéro. * le numéro de carte d'identité est imprimé en bas à gauche sur la carte. * Il est composé de 12 chiffres. * Les deux derniers font office de chiffres de contrôle * Le chiffre de contrôle est le complément de 97 du modulo 97 du nombre formé par les 10 premiers chiffres. * Lorsque la valeur du chiffres de contrôle est 0, il devient alors 97. *__________________________________________________________________
* carte SIS ?(sécurité sociale) * il faut en fait calculer le check digit de ce numéro. * le numéro de carte SIS est imprimé en bas à gauche sur la carte. * Il est composé de 10 chiffres. * Les deux derniers chiffres font office de chiffres de contrôle * pour les cartes dont le numéro est > 13 millions, * le chiffre de contrôle est le complément de 97 du modulo 97 du nombre formé par les 8 premiers chiffres. * Exemple: * Numéro de carte SIS = 0511018531: 97 - (modulo 97 de 05110185) = 97 - 66 = 31. * les cartes dont le numéro est < à 13 millions, n'ont pas de de chiffres de contrôle
Code source :
CLEAR SETDATEFRENCH SETCENTURYON
* Appels de la fonction DigitNational_be
? "Exemple Nº National ="+ "600504 114 91" (<= 31/12/1999) * ? "Exemple Nº National ="+ "000922 247 58" (>= 01/01/2000) WAIT
DigitNational_be("60050411491") * DigitNational_be("00092224758")
*__________________________________________________________________ FUNCTION DigitNational_be *__________________________________________________________________
PARAMETERS sNat
* Contrôle du paramètre passé IFPCOUNT()=0
? "Numéro manquant" RETURN.F. ENDIF
IFLEN(sNat) <> 11
? "Le numéro National doit comprendre 11 chiffres" RETURN.F. ENDIF
* Détermination de l'année de naissance * années 1920>1999 IFVAL(LEFT(sNat,2)) > 20 ANDVAL(LEFT(sNat,2)) <= 99
Annee4Car = "19"+ LEFT(sNat,2) ELSE
Annee4Car = "20"+ LEFT(sNat,2) ENDIF
IF tDate <= CTOD("31/12/1999") * Calcul du digit si naissance <=31/12/1999 * En clair : les 97 moins le MODULO(97) des 9 premiers
Tdigit = 97 - MOD(VAL(LEFT(sNat,9)),97)
ELSE * Calcul du digit si naissance > 31/12/1999 * En clair : les 11 chiffres/97 moins le MODULO de 2+8 premiers chiffres * chiffres par 97
Tdigit = 97 - MOD(VAL("2"+LEFT(sNat,9)),97)
ENDIF
* Les 2 derniers chiffres du numéro National doivent être * équivalents IF tdigit =VAL(RIGHT(sNat,2))
? sNat + " -> Ce numéro est correct -> le digit est "+ STR(tdigit) RETURN.T. ELSE
? sNat + " -> Ce numéro est incorrect -> le digit est "+STR(tdigit) RETURN.F. ENDIF ENDFUNC
Commentaires
le 29/09/2014, Guy Bonemme a écrit : Merci à Eric Noël pour l'information d'erreur sur les dates >= 01/01/2014
Merci à Eric Noël pour l'information d'erreur sur les dates >= 01/01/2014