Eine norwegische Geburtsnummer besteht aus 11 Ziffern, die wie folgt zusammengesetzt sind:
DDMMYYiiikk
DDist der Tag (von 01-31)MMist der Monat (von 01-12)YYist das Jahr (von 00-99). Es wird nicht zwischen 1900 und 2000 unterschiedeniiiist die "individuelle Nummer"kksind zwei Kontrollziffern
iii wird durch Geburtsjahr und Geschlecht folgendermaßen bestimmt
- 0000-1900: Ignorieren Sie, es gibt einige Inkonsistenzen und Sonderfälle
- 1900-1999: Bereich = 000-499
- 2000-2039: Bereich = 500-999
- Weiblich: Gerade Zahlen (und 000)
- Männlich: Ungerade Zahlen
Die Kontrollnummern werden folgendermaßen ermittelt:
Nennen wir die 11 Ziffern:
d1 d2 m1 m2 y1 y2 i1 i2 i3 k1 k2
Dann können die Kontrollziffern unter Verwendung der Gleichungen berechnet werden:
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).
Bei einigen Kombinationen können die Kontrollnummern k1oder k2werden 10. In diesem Fall ist die Nummer ungültig.
Wenn der Summenmodul 11 für k1oder k211 ist, dh k1 = 11 - (11 mod 11), ist die Kontrollziffer 0, nicht 11.
Herausforderung
Nehmen Sie einen Buchstaben Moder F(männlich oder weiblich) und eine elfstellige Nummer als Eingabe und prüfen Sie, ob die Geburtsnummer gemäß den obigen Regeln gültig ist.
- Eingabeformat und Reihenfolge sind optional
- Die 11 Zahlen müssen eine einzelne Zahl oder eine fortlaufende Zeichenfolge sein (Sie können die Eingabe nicht als annehmen
DD, MM, YY, iii, kk). - Sie können davon ausgehen, dass das Datum gültig ist (310699xxxxx wird nicht als Eingabe angegeben).
- Die Ausgabe ist ein Wahrheits- / Falschwert (1/0, wahr / falsch usw.)
- Programm oder Funktion
- Es gelten alle Standardregeln
Sie finden alle gültigen Nummern auf dieser Seite (auf Norwegisch), indem Sie ein Datum auswählen.
Beispiele:
M, 01010099931
True
F, 01029042620
True
M, 0101009841
False
F, 01010051866
True
F, 08021690849
True
M, 01029040105
True
M, 01029037473
False
Der kürzeste Code in Bytes gewinnt.
["Q", "01010099931"]zurückkommttrue?)