最快的Nino(英国国民保险号码)发电机和验证器。在gov.uk上生成并验证了NIM39110规格的UK NI数字。
test-nino
是一种以性能为目的,具有零依赖性。基准为自己说话。
入门
安装
进口
可用功能
随机的
增量
证实
归一化
基准
什么是有效的英国国民保险号码?
有多少个有效的英国国家保险号码?
您可以从NPM安装Test-Nino软件包:
npm i test-nino
// esm/typescriptimport *作为'test-nino'''; // commonjsconst testnino = require('test-nino'); // denoimport * as testnino作为testnino的testnino作为testnino as testnino as testnino as testnino as testnino as testnino .xx/mod.ts“;
用于生成随机的nino:
const nino = testnino.random(); //返回有效的英国国家保险号码,例如AA000000A
警告:不能保证您不能使用这种方法生成相同的Nino。如果您每次都需要独特的Nino,建议您使用增量发电机。
如果您想确保不会生成重复的Nino,则此方法是最好的。此功能利用JavaScript生成器列举所有可能有效的UK NI号AA000000A-ZY999999D
(总共有1,492,000,000)。
发电机将在前缀,编号和后缀上进行枚举。
//创建一个发电机instanceConst独立烯辅导仪= testnino.incremental(); for(让i = 0; i <= 10000000; i ++){iniquenigenerator.next()//从第一个迭代中返回generator // the Generator //在第一次迭代中返回将返回{value:'aa000000a',完成:false} //在第二次迭代中,它将返回{value:'aa00000000b',完成:false} // ... // ... //在10000000th Iteration上,它将返回{value {value {value { 'ac500000a',完成:false}}
只有一旦列举了所有
done
的组合,才能返回true
。
此功能将验证提供的Nino并返回一个对象,该对象详细介绍了哪些规则已通过或失败。
预计NINO已经没有格式化等。-您可以在需要时使用
normalise
来准备Nino。
//有效的ninotestnino.validate(“ ab123456c”); // {//规则:{//类型:true,//长度:true,// pregix:true,// //},//结果:true //} //无效的ninotestnino.validate(1); // {//规则:{//类型:false:false,//},//
返回的对象将始终具有
outcome
属性,但是该功能很快就会失效,因此只能返回Nino测试元素的结果。
此功能将使NINOS归一化,剥离空格并将其转换为大写字符。
testnino.normalise('aa 00 00 00 a')// aa000000000000atestnino.normalise('bb 123456 b')//
这可以用作
validate
函数的底漆
所有基准测试都使用节点V18.16.0上的基准测试。 COMPORJS进口用于所有软件包,以使情况保持公平。您可以通过benchmarks
夹自己运行基准测试。结果已舍入到3个重要数字,以平滑运行之间的方差,并提供更可比的结果。
test-nino
比下一个最快的随机NI数字生成器快2.6倍以上:
包裹 | 版本 | 操作/秒 |
---|---|---|
假尼诺 | 0.0.1 | 5,810,000 |
Random_uk_nino | 1.0.3 | 6,340,000 |
Avris-Generator | 0.8.2 | 2,900,000 |
测试尼诺 | 最新的 | 17,000,000 |
其他软件包使用循环,这些循环经历了
Generate random NINO > is it valid? > no > repeat
,直到给出有效的Nino。这会花费宝贵的CPU时间,并阻止节点事件循环。test-nino
是不同的,而是存储有效前缀的完整列表,然后随机选择这些前缀。没有循环会导致其他软件包无法保证的稳定性能。
验证有效的Nino时, test-nino
比下一个最快的验证功能快14倍以上:
包裹 | 版本 | 有效(AA000000A) | 无效(a) | 无效(null) | 无效(AAX00000A) | 无效(AA00000XA) |
---|---|---|---|---|---|---|
有效的尼诺 | 1.0.0 | 34,000,000 | 84,600,000 | 64,100,000 | 75,200,000 | 27,000,000 |
是国家的保险名 | 1.0.0 | 42,800,000 | 1,030,000,000 | 1,030,000,000 | 80,000,000 | 33,000,000 |
Avris-Generator | 0.8.2 | 4,190,000 | 232,000(投掷) | 105,000(投掷) | 230,000(投掷) | 230,000(投掷) |
测试尼诺 | 最新的 | 609,000,000 | 1,030,000,000 | 1,030,000,000 | 1,020,000,000 | 601,000,000 |
大多数其他软件包都依赖于正则图案,而
test-nino
中的验证功能则利用索引的角色查找速度更快。该功能也很快失败,这意味着对于特定无效方案的增长甚至更大。
在gov.uk实施时引用规则:
Nino由2个字母,6个数字和后缀组成,该字母始终是A,B,C或D。
看起来像这样:QQ 12 34 56 a
所有前缀都是有效的,除了:
字符d,f,i,q,u和v不会用作NINO前缀的第一个或第二个字母。
字母o不用用作前缀的第二个字母。
不使用前缀BG,GB,KN,NK,NT,TN和ZZ
首先,让我们考虑Nino前缀前两个字母的限制:
字符d,f,i,q,u和v不会用作前缀的第一个或第二个字母,因此第一个字母有20个可能的选择(AZ不包括D,F,I,i,Q,u和v)和第二个字母的19个可能选择(AZ不包括D,F,I,Q,U,V和O)。
不使用前缀BG,GB,KN,NK,NT,TN和ZZ,因此前两个字母有20 x 19-7 = 373可能的组合。
接下来,让我们考虑最终字母的限制,即后缀:
后缀只能是A,B,C或D,因此有4个可能的后缀。
最后,让我们考虑NINO中的六个数字:
六个数字中的每一个都可以具有10个可能的值(0-9),因此六个数字有10^6(100万)可能的组合。
将所有这些结合在一起,可能的独特Ninos数量将是:
373(对于前两个字母)x 10^6(对于六个数字)x 4(最终字母)= 1,492,000,000可能的尼诺斯。