Generator dan validator Nino Nino (UK National Assurance) tercepat. Menghasilkan dan memvalidasi nomor NI UK ke spesifikasi NIM39110 di Gov.uk.
test-nino
adalah kinerja yang berfokus dan tidak memiliki dependensi. Tolok ukur berbicara sendiri.
Memulai
Memasang
Impor
Fungsi yang tersedia
acak
inkremental
mengesahkan
menormalkan
Tolok ukur
Berapa nomor asuransi nasional Inggris yang valid?
Ada berapa nomor asuransi nasional Inggris?
Anda dapat menginstal paket tes-nino dari NPM:
npm i test-nino
// esm/typeScripport * sebagai testnino dari 'test-nino'; // commonjsconst testnino = membutuhkan ('test-nino'); // denoimport * sebagai testnino dari "https://deno.land/x/test_nino@vx .Xx/mod.ts ";
Digunakan untuk menghasilkan nino acak:
const nino = testnino.random (); // mengembalikan nomor asuransi nasional Inggris yang valid misalnya AA000000A
PERINGATAN: Tidak dijamin bahwa Anda tidak dapat menghasilkan nino yang sama lebih dari sekali menggunakan metode ini. Jika Anda memerlukan nino yang unik setiap saat, saya sarankan Anda menggunakan generator tambahan.
Metode ini adalah yang terbaik jika Anda ingin memastikan Anda tidak menghasilkan nino duplikat. Fungsi ini menggunakan generator JavaScript untuk menghitung melalui semua kemungkinan NI NI NI yang valid AA000000A-ZY999999D
(ada total 1.492.000.000).
Generator akan menyebutkan awalan, angka dan kemudian akhiran.
// Buat generator instanceconst uniquenigenerator = testnino.incremental (); untuk (biarkan i = 0; i <= 10000000; i ++) {uniquenigenerator.next () // Mengembalikan contoh berikutnya dari generator // pada iterasi 1 itu akan mengembalikan {value: 'aa000000a', selesai: false} // pada iterasi ke -2 akan mengembalikan {value: 'aa000000b', selesai: false} // ... // pada iterasi 10000000 itu akan mengembalikan {value: 'AC500000A', selesai: false}}
Properti
done
hanya akan mengembalikantrue
setelah semua kombinasi yang mungkin telah disebutkan.
Fungsi ini akan memvalidasi nino yang disediakan dan mengembalikan objek yang merinci aturan mana yang telah lewat atau gagal.
Diharapkan bahwa nino sudah tanpa memformat dll. - Anda dapat menggunakan
normalise
untuk menyiapkan nino jika diperlukan.
// ninotestnino.validate yang valid ("ab123456c"); // {// aturan: {// type: true, // length: true, // awalan: true, // nomor: true, // suffix: true //}, // hasil: true //} // ninotestnino.validate yang tidak valid (1); // {// aturan: {// type: false, //}, // hasil: false //}
Objek yang dikembalikan akan selalu memiliki properti
outcome
tetapi fungsi gagal dengan cepat dan hanya akan mengembalikan hasil untuk setiap elemen yang diuji Nino.
Fungsi ini akan menormalkan nino, menelanjangi whitespace dan mengubahnya menjadi karakter huruf besar.
testnino.normalise ('aa 00 00 00 a') // aa000000Atestnino.normalise ('BB 123456 B') // BB123456B
Ini dapat digunakan sebagai primer untuk fungsi
validate
Semua tolok ukur dijalankan menggunakan Benchmark.js di Node V18.16.0. Impor umum digunakan untuk semua paket agar tetap adil. Anda dapat menjalankan tolok ukur sendiri dari folder benchmarks
. Hasil telah dibulatkan menjadi 3 angka signifikan untuk menghaluskan varian antara berjalan dan memberikan hasil yang lebih sebanding.
test-nino
lebih dari 2,6x lebih cepat dari generator nomor NI acak tercepat berikutnya:
kemasan | versi | OPS/SEC |
---|---|---|
n-nino palsu | 0.0.1 | 5.810.000 |
Random_uk_nino | 1.0.3 | 6.340.000 |
Avris-generator | 0.8.2 | 2.900.000 |
tes-nino | terbaru | 17.000.000 |
Paket lain menggunakan loop yang melalui proses
Generate random NINO > is it valid? > no > repeat
, sampai nino yang valid diberikan. Ini membutuhkan waktu CPU yang berharga dan memblokir loop acara node.test-nino
dibuat berbeda dan sebaliknya menyimpan daftar lengkap awalan yang valid yang kemudian dipilih secara acak. Tidak ada loop yang menghasilkan kinerja yang konsisten yang tidak dijamin dengan paket lain.
test-nino
lebih dari 14x lebih cepat dari fungsi validasi tercepat berikutnya saat memvalidasi nino yang valid:
kemasan | versi | Valid (AA000000A) | tidak valid (a) | tidak valid (nol) | tidak valid (aax00000a) | tidak valid (AA00000XA) |
---|---|---|---|---|---|---|
valid-nino | 1.0.0 | 34.000.000 | 84.600.000 | 64.100.000 | 75.200.000 | 27.000.000 |
National-national-number-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 (lemparan) | 105.000 (lemparan) | 230.000 (lemparan) | 230.000 (lemparan) |
tes-nino | terbaru | 609.000.000 | 1.030.000.000 | 1.030.000.000 | 1.020.000.000 | 601.000.000 |
Sebagian besar paket lain bergantung pada pola regex, fungsi validasi dalam
test-nino
sebagai gantinya menggunakan pencarian karakter yang diindeks yang jauh lebih cepat. Fungsi ini juga gagal dengan cepat, yang berarti keuntungan yang lebih besar untuk skenario tidak valid tertentu.
Untuk mengutip aturan pada saat implementasi dari Gov.uk:
Nino terdiri dari 2 huruf, 6 angka dan akhiran, yang selalu A, B, C, atau D.
Ini terlihat seperti ini: QQ 12 34 56 a
Semua awalan valid kecuali:
Karakter d, f, i, q, u, dan v tidak digunakan sebagai huruf pertama atau kedua dari awalan nino.
Huruf o tidak digunakan sebagai huruf kedua dari awalan.
Awalan BG, GB, KN, NK, NT, TN dan ZZ tidak akan digunakan
Pertama, mari kita pertimbangkan pembatasan pada dua huruf pertama dari awalan Nino:
Karakter d, f, i, q, u, dan v tidak digunakan sebagai huruf pertama atau kedua dari awalan, jadi ada 20 kemungkinan pilihan untuk huruf pertama (az tidak termasuk d, f, i, q, u, u , dan v) dan 19 pilihan yang mungkin untuk huruf kedua (az tidak termasuk d, f, i, q, u, v, dan o).
Awalan BG, GB, KN, NK, NT, TN dan ZZ tidak akan digunakan, jadi ada 20 x 19 - 7 = 373 kemungkinan kombinasi dari dua huruf pertama.
Selanjutnya, mari kita pertimbangkan pembatasan pada surat terakhir, yaitu akhiran:
Suffix hanya bisa A, B, C, atau D, jadi ada 4 kemungkinan sufiks.
Akhirnya, mari kita pertimbangkan enam angka di Nino:
Masing-masing dari enam angka dapat memiliki 10 nilai yang mungkin (0-9), jadi ada 10^6 (1 juta) kombinasi yang mungkin dari enam angka.
Menyatukan semua ini, jumlah nino unik yang mungkin adalah:
373 (untuk dua huruf pertama) x 10^6 (untuk enam angka) x 4 (untuk huruf terakhir) = 1.492.000.000 nino yang mungkin.