가장 빠른 Nino (영국 국민 보험 번호) 생성기 및 유효성 검사기. gov.uk에서 영국 NI 번호를 NIM39110 사양으로 생성하고 검증합니다.
test-nino
는 성능 중심이며 의존성이 없습니다. 벤치 마크는 스스로를 말합니다.
시작하기
설치하다
수입
사용 가능한 기능
무작위의
증분
검증
정상화하십시오
벤치 마크
유효한 영국 국민 보험 번호는 무엇입니까?
얼마나 많은 유효한 영국 국민 보험 수가 있습니까?
NPM에서 Test-Nino 패키지를 설치할 수 있습니다.
npm i test-nino
// 'test-nino'에서 testnino로서 esm/typescriptimport *; // commonjsconst testnino = require ( 'test-nino'); // denoimport * "https://deno.land/x/test_nino@vx에서 testnino as .xx/mod.ts ";
임의의 니노를 생성하는 데 사용됩니다.
const nino = testnino.random (); // 유효한 영국 국민 보험 번호를 반환합니다. 예 : AA000000A
경고 :이 방법을 사용하여 동일한 NINO를 두 번 이상 생성 할 수 없다는 것은 보장되지 않습니다. 매번 독특한 니노가 필요한 경우 증분 발전기를 사용하는 것이 좋습니다.
이 방법은 중복 Nino를 생성하지 않도록하는 경우 가장 좋습니다. 이 함수는 JavaScript 생성기를 사용하여 가능한 모든 유효한 UK NI 번호 AA000000A-ZY999999D
(총 1,492,000,000 개)를 통해 열거합니다.
생성기는 접두사, 숫자 및 접미사에 열거됩니다.
// 생성기 InstanceConst eliquenigerator = testnino.incremental (); for (i = 0; i <= 100000000; i ++) {irliquenigenerator.next () // 생성기에서 다음 인스턴스를 첫 번째 반복에서 반환합니다. {value : 'aa000000a', done : false} // 2 차 반복에서 {value : 'aa000000b', done : false} // ... // 반복됩니다. 'AC500000A', 완료 : false}}
done
속성은 가능한 모든 조합이 열거 된 후에 만true
합니다.
이 기능은 제공된 NINO를 검증하고 규칙이 통과하거나 실패한 세부 사항을 반환합니다.
NINO는 이미 서식이 없을 것으로 예상됩니다 .-
normalise
사용하여 필요한 경우 NINO를 준비 할 수 있습니다.
// 유효한 ninotestnino.validate ( "ab123456c"); // {// 규칙 : {// type : true, // length : true, // prefix : true, // 숫자 : true, // tubsix : true //}, // 결과 : true //} // 유효하지 않은 ninotestnino.validate (1); // {// 규칙 : {// type : false, //}, // 결과 : false //}
반환 된 객체는 항상
outcome
속성을 가지지 만 함수는 빠르게 실패하므로 NINO의 각 테스트 된 요소에 대해 결과 만 반환합니다.
이 기능은 NINOS를 정규화하여 공백을 벗겨 내고 대문자로 변환합니다.
testnino.normalise ( 'AA 00 00 00 A') // AA000000ATESTNINO.Normalise ( 'BB 123456 B') // BB123456B
이것은
validate
Function의 프라이머로 사용할 수 있습니다.
모든 벤치 마크는 노드 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
유효한 Nino를 검증 할 때 다음으로 가장 빠른 유효성 검사 기능보다 14 배 이상 빠릅니다 .
패키지 | 버전 | 유효한 (AA000000A) | 유효하지 않은 (a) | 유효하지 않은 (null) | 유효하지 않은 (AAX00000A) | 유효하지 않은 (AA00000XA) |
---|---|---|---|---|---|---|
유효한 Nino | 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 |
대부분의 다른 패키지는 Regex 패턴에 의존하며
test-nino
의 Validate 기능은 대신 훨씬 빠른 인덱스 문자 조회를 사용합니다. 이 기능은 또한 빠르게 실패하므로 특정 유효하지 않은 시나리오에 대한 더 큰 이익을 의미합니다.
Gov.uk에서 구현 당시 규칙을 인용하려면 :
Nino는 2 글자, 6 숫자 및 접미사로 구성되어 있으며 항상 A, B, C 또는 D입니다.
다음과 같이 보입니다 : QQ 12 34 56 A
모든 접두사는 다음을 제외하고 유효합니다.
문자 d, f, i, q, u 및 v는 니노 접두사의 첫 번째 또는 두 번째 문자로 사용되지 않습니다.
문자 O는 접두사의 두 번째 문자로 사용되지 않습니다.
접두사 BG, GB, KN, NK, NT, TN 및 ZZ를 사용하지 않아야합니다.
먼저 Nino Prefix의 첫 두 글자에 대한 제한 사항을 고려해 봅시다.
문자 d, f, i, q, u 및 v는 접두사의 첫 번째 또는 두 번째 문자로 사용되지 않으므로 첫 번째 문자에 대한 20 가지 가능한 선택이 있습니다 (d, f, i, q, u를 제외한 AZ , 및 v) 및 두 번째 문자에 대한 19 가지 가능한 선택 (d, f, i, q, u, v 및 o를 제외한 Az).
접두사 BG, GB, KN, NK, NT, TN 및 ZZ는 사용하지 않으므로 처음 두 글자의 20 x 19-7 = 373 가능한 조합이 있습니다.
다음으로 최종 문자의 제한 사항을 고려해 봅시다.
접미사는 a, b, c 또는 d 일 수 있으므로 4 개의 가능한 접미사가 있습니다.
마지막으로, Nino의 6 개의 숫자를 고려해 봅시다 :
6 개의 숫자 각각은 10 개의 가능한 값 (0-9)을 가질 수 있으므로 6 개의 숫자의 10^6 (1 백만) 가능한 조합이 있습니다.
이것을 모두 정리하면 가능한 고유 한 닌노의 수는 다음과 같습니다.
373 (처음 두 글자의 경우) x 10^6 (6 개의 숫자의 경우) x 4 (최종 문자의 경우) = 1,492,000,000 가능한 NINOS.