Un numéro de naissance norvégien se compose de 11 chiffres, composé comme suit:
DDMMYYiiikk
DD
est le jour (du 01-31)MM
est le mois (du 01-12)YY
est l'année (de 00 à 99). Ce n'est pas différencié entre 1900 et 2000iii
est le "numéro individuel"kk
sont deux chiffres de contrôle
iii
est déterminé par l'année de naissance et le sexe de la manière suivante
- 0000-1900: Ignorance, il y a des incohérences et des cas spéciaux
- 1900-1999: plage = 000-499
- 2000-2039: plage = 500-999
- Féminin: nombres pairs (et 000)
- Homme: nombres impairs
Les numéros de contrôle sont déterminés de la manière suivante:
Appelons les 11 chiffres:
d1 d2 m1 m2 y1 y2 i1 i2 i3 k1 k2
Ensuite, les chiffres de contrôle peuvent être calculés à l'aide des équations:
k1 = 11 - ((3 * d1 + 7 * d2 + 6 * m1 + 1 * m2 + 8 * y1 + 9 * y2 + 4 * i1 + 5 * i2 + 2 * i3) mod 11)
k2 = 11 - ((5 * d1 + 4 * d2 + 3 * m1 + 2 * m2 + 7 * y1 + 6 * y2 + 5 * i1 + 4 * i2 + 3 * i3 + 2 * k1) mod 11).
Pour certaines combinaisons, les numéros de contrôle k1
ou k2
peuvent devenir 10
. Si tel est le cas, le numéro sera invalide.
Si le module de somme 11 pour k1
ou k2
est 11, c'est-à-dire k1 = 11 - (11 mod 11)
, alors le chiffre de contrôle sera 0, pas 11.
Défi
Prenez une lettre, M
ou F
(homme ou femme), et un nombre à onze chiffres comme entrée, et vérifiez si le numéro de naissance est valide selon les règles ci-dessus.
- Le format d'entrée et la commande sont facultatifs
- Les 11 chiffres doivent être un seul numéro ou une chaîne consécutive (vous ne pouvez pas prendre l'entrée comme
DD, MM, YY, iii, kk
). - Vous pouvez supposer que la date est valide (310699xxxxx ne sera pas donnée en entrée)
- La sortie est une valeur véridique / fausse (1/0, vrai / faux, etc.)
- Programme ou fonction
- Toutes les règles standard s'appliquent
Vous pouvez trouver tous les numéros valides sur cette page (en norvégien) en choisissant une date.
Exemples:
M, 01010099931
True
F, 01029042620
True
M, 0101009841
False
F, 01010051866
True
F, 08021690849
True
M, 01029040105
True
M, 01029037473
False
Le code le plus court en octets gagne.
["Q", "01010099931"]
retourtrue
?)