最快的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可能的尼諾斯。