ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Nº National Belge, Nº Carte d'identité, Nº Carte SIS -Belge   



L'auteur

Guy Bonemme
Belgique Belgique
Membre Simple
# 0000000029
enregistré le 15/10/2004

73 ans
BONEMME Guy
B-1410 Waterloo
Fiche personnelle


Note des membres
pas de note

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é 46126 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0
VFP 3.0
FPW 2.6
FPD 2.x

Description

* PROCEDURE FOXPRO
* Guy Bonemme

* 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
                 SET DATE FRENCH
                 SET CENTURY ON

                  * 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é
                  IF PCOUNT()=0
                      ? "Numéro manquant"
                      RETURN .F.
                 ENDIF

                  IF LEN(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
                   IF VAL(LEFT(sNat,2)) > 20 AND VAL(LEFT(sNat,2)) <= 99
                     Annee4Car = "19"LEFT(sNat,2)
                   ELSE
                    Annee4Car = "20"LEFT(sNat,2)
                   ENDIF

                   tDate = CTOD(SUBSTR(SNat,5,2)+"/"+SUBSTR(SNat,3,2)+"/"+Annee4Car)

                   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

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2019.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3