挪威出生号码由11位数字组成,组成方式如下:
DDMMYYiiikk
DD
是一天(从01-31开始)MM
是月份(从01到12)YY
是年份(从00-99)。1900和2000之间没有区别iii
是“个人号码”kk
是两个控制数字
iii
由出生年份和性别决定,方法如下
- 0000-1900:无视,存在一些不一致和特殊情况
- 1900-1999:范围= 000-499
- 2000-2039:范围= 500-999
- 女:偶数(和000)
- 男:奇数
控制编号是通过以下方式确定的:
我们称这11位数字为:
d1 d2 m1 m2 y1 y2 i1 i2 i3 k1 k2
然后可以使用以下公式计算控制位数:
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).
对于某些组合,控制编号k1
或k2
可以变为10
。如果是这样,该号码将无效。
如果总和模量11 k1
或k2
为11,即k1 = 11 - (11 mod 11)
,则控制位为0,而不是11。
挑战
输入一个字母(M
或F
(男性或女性))和一个11位数字作为输入,并根据上述规则检查出生号码是否有效。
- 输入格式和顺序是可选的
- 这11个数字必须是单个数字或连续的字符串(您不能将输入作为
DD, MM, YY, iii, kk
)。 - 您可以假设日期有效(不会提供输入310699xxxxx)
- 输出为真/假值(1/0,真/假等)
- 程序或功能
- 所有标准规则均适用
通过选择日期,您可以在此页面上找到所有有效数字(挪威语)。
例子:
M, 01010099931
True
F, 01029042620
True
M, 0101009841
False
F, 01010051866
True
F, 08021690849
True
M, 01029040105
True
M, 01029037473
False
以字节为单位的最短代码获胜。
@Chiru,假设仅给出M或F作为输入。无效输入的未定义行为是可以的。
—
Stewie Griffin
["Q", "01010099931"]
的回报true
?)