最速のニノ(英国国民保険番号)ジェネレーターとバリデーター。 gov.ukのNIM39110仕様に英国のNI番号を生成および検証します。
test-nino
はパフォーマンスに焦点を当てており、依存関係がゼロです。ベンチマークはそれ自体を物語っています。
はじめる
インストール
輸入
利用可能な機能
ランダム
増分
検証します
ノーマライズ
ベンチマーク
有効な英国の国民保険番号とは何ですか?
有効な英国の国民保険番号はいくつありますか?
NPMからTest-Ninoパッケージをインストールできます。
npm i test-nino
// esm/typscriptimport * 'test-nino'; // commonjsconst testnino = require( 'test-nino'); // denoimport * as as as as as as "https://deno.land/x/test_nino@vx .xx/mod.ts ";
ランダムなニノを生成するために使用されます:
const nino = testnino.random(); //有効な英国の国民保険番号などのAA000000Aを返します
警告:この方法を使用して同じニノを複数回生成できないことは保証されていません。毎回ユニークなニノが必要な場合は、インクリメンタルジェネレーターを使用することをお勧めします。
この方法は、重複したニノを生成しないようにしたい場合に最適です。この関数は、JavaScriptジェネレーターを利用して、可能なすべての有効な英国NI番号AA000000A-ZY999999D
を列挙します(合計で1,492,000,000があります)。
ジェネレーターは、プレフィックス、番号、および接尾辞に列挙します。
//ジェネレーターの作成instanceconst uniquenigenerator = testnino.incremental(); {value: 'aa000000a'、done:false} // 2回目の繰り返しで{value: 'aa000000b'、done:false} // ... // 10000000th Iterationで{value:value:// 「AC500000A」、完了:false}}
done
プロパティは、可能なすべての組み合わせが列挙された後にのみtrue
を返します。
この関数は、提供されたNINOを検証し、どのルールが合格または故障したかを詳述するオブジェクトを返します。
ニーノはすでにフォーマットなどがないことが期待されています。必要に応じてニーノを準備するために
normalise
使用できます。
//有効なninotestnino.validate( "ab123456c"); // {// rules:{// type:true、length:true、// prefix:true、// number:true、// fuffix:true:true //}、//結果:true //} //無効なninotestnino.validate(1); // {// rules:{// type:false、//}、// outcome:false //}
返されたオブジェクトには常に
outcome
プロパティがありますが、関数は高速で故障しているため、Ninoのテストされた各要素の結果のみを返します。
この関数は、NINOSを正規化し、空白を剥ぎ取り、大文字に変換します。
testnino.normalise( 'aa 00 00 00 a')// aa000000atestnino.normalise( 'bb 123456 b')// bb123456b
これは、
validate
関数のプライマーとして使用できます
すべてのベンチマークは、ノードv18.16.0でbenchmark.jsを使用して実行されます。 CommonJSのインポートは、すべてのパッケージに使用され、物事を公平に保ちます。 benchmarks
フォルダーからベンチマークを実行できます。結果は3つの重要な数字に丸められており、実行間のばらつきを滑らかにし、より匹敵する結果を提供します。
test-nino
、次の最速のランダムNI番号ジェネレーターよりも2.6倍以上速いです。
パッケージ | バージョン | ops/sec |
---|---|---|
偽ニノ | 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
。これにより、貴重なCPU時間がかかり、ノードイベントループがブロックされます。test-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 |
IS-National-Insurance-Number | 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からの実装時にルールを引用するには:
ニノは、常にA、B、C、またはDである2文字、6つの数字、および接尾辞で構成されています。
それは次のように見えます:QQ 12 34 56 A
すべてのプレフィックスは以下を除いて有効です。
文字d、f、i、q、u、およびvは、ニノプレフィックスの最初または2番目の文字として使用されません。
文字oは、プレフィックスの2番目の文字として使用されません。
プレフィックスBG、GB、KN、NK、NT、TN、ZZは使用する必要はありません
まず、ニノプレフィックスの最初の2文字の制限を考えてみましょう。
文字d、f、i、q、u、vは、プレフィックスの最初または2番目の文字として使用されていないため、最初の文字には20の可能な選択肢があります(d、f、i、q、uを除くAZ 、およびv)および2番目の文字(d、f、i、q、u、v、およびoを除くAZ)の可能な19の選択肢。
プレフィックスBG、GB、KN、NK、NT、TN、ZZは使用しないため、最初の2文字の20 x 19-7 = 373の組み合わせがあります。
次に、最終文字の制限を考えてみましょう。これは接尾辞です。
接尾辞はa、b、c、またはdのみであるため、4つの可能なサフィックスがあります。
最後に、ニノの6つの数字を考えてみましょう。
6つの数値のそれぞれには10の可能な値(0〜9)がある可能性があるため、6つの数値の10^6(100万)の組み合わせがあります。
これをすべてまとめると、考えられるユニークなニノの数は次のとおりです。
373(最初の2文字の場合)x 10^6(6つの数字の場合)x 4(最終文字の場合)= 1,492,000,000可能なニノ。