เครื่องกำเนิดและผู้ตรวจสอบความถูกต้องของ Nino (หมายเลขประกันแห่งชาติของสหราชอาณาจักร) ที่เร็วที่สุด สร้างและตรวจสอบหมายเลขสหราชอาณาจักรตามข้อกำหนดของ NIM39110 บน gov.uk
test-nino
เป็นประสิทธิภาพที่มุ่งเน้นและมีการพึ่งพาเป็นศูนย์ เกณฑ์มาตรฐานพูดเพื่อตัวเอง
เริ่มต้น
ติดตั้ง
นำเข้า
ฟังก์ชั่นที่มีอยู่
แบบสุ่ม
เพิ่มขึ้น
ตรวจสอบความถูกต้อง
ทำให้เป็นปกติ
เกณฑ์มาตรฐาน
หมายเลขประกันแห่งชาติของสหราชอาณาจักรที่ถูกต้องคืออะไร?
มีประกันแห่งชาติในสหราชอาณาจักรที่ถูกต้องกี่แห่ง?
คุณสามารถติดตั้งแพ็คเกจทดสอบ -nino ได้จาก NPM:
npm i test-nino
// esm/typescriptimport * เป็น testnino จาก 'test-nino'; // Commonjsconst testnino = ต้องการ ('test-nino'); // denoimport * เป็น testnino จาก "https://deno.land/x/test_nino@vx .xx/mod.ts ";
ใช้เพื่อสร้าง Nino แบบสุ่ม:
const nino = testnino.random (); // ส่งคืนหมายเลขประกันแห่งชาติของสหราชอาณาจักรที่ถูกต้องเช่น aa000000a
คำเตือน: ไม่รับประกันว่าคุณจะไม่สามารถสร้าง Nino เดียวกันได้มากกว่าหนึ่งครั้งโดยใช้วิธีนี้ หากคุณต้องการ Nino ที่ไม่ซ้ำกันทุกครั้งฉันขอแนะนำให้คุณใช้เครื่องกำเนิดไฟฟ้าที่เพิ่มขึ้น
วิธีนี้จะดีที่สุดถ้าคุณต้องการให้แน่ใจว่าคุณไม่ได้สร้าง Nino ที่ซ้ำกัน ฟังก์ชั่นนี้ใช้เครื่องกำเนิดไฟฟ้า JavaScript เพื่อระบุผ่านหมายเลข UK NI ที่ถูกต้องที่เป็นไปได้ทั้งหมด AA000000A-ZY999999D
(มีทั้งหมด 1,492,000,000,000)
เครื่องกำเนิดไฟฟ้าจะระบุไว้ในคำนำหน้าจำนวนและต่อท้าย
// สร้างเครื่องกำเนิดไฟฟ้า instanceconst uniquenigenerator = testNino.incremental (); สำหรับ (ให้ i = 0; i <= 10,000,000; i ++) {uniquenigenerator.next () // ส่งคืนอินสแตนซ์ถัดไปจากเครื่องกำเนิด จะส่งคืน {value: 'aa000000a', ทำ: false} // ในการทำซ้ำครั้งที่ 2 มันจะส่งคืน {value: 'aa000000b', เสร็จสิ้น: false} // ... // ในการทำซ้ำ 10,000,000th มันจะส่งคืน {value: 'AC500000A' เสร็จแล้ว: false}}
คุณสมบัติ
done
จะส่งคืนtrue
เมื่อชุดค่าผสมที่เป็นไปได้ทั้งหมดได้รับการแจกแจง
ฟังก์ชั่นนี้จะตรวจสอบ Nino ที่ให้ไว้และส่งคืนวัตถุซึ่งรายละเอียดที่กฎได้ผ่านหรือล้มเหลว
คาดว่า Nino นั้นไม่มีการจัดรูปแบบ ฯลฯ - คุณสามารถใช้
normalise
เพื่อเตรียม Nino ได้หากจำเป็น
// a ninotestnino.validate ที่ถูกต้อง ("ab123456c"); // {// กฎ: {// ประเภท: จริง, // ความยาว: จริง, // คำนำ //}, // ผลลัพธ์: true //} // ninotestnino.validate ที่ไม่ถูกต้อง (1); // {// กฎ: {// type: false, //}, // ผลลัพธ์: false //}
วัตถุที่ส่งคืนจะมีคุณสมบัติ
outcome
เสมอ แต่ฟังก์ชั่นล้มเหลวอย่างรวดเร็วและจะส่งคืนผลลัพธ์สำหรับแต่ละองค์ประกอบที่ทดสอบของ Nino
ฟังก์ชั่นนี้จะทำให้ Ninos เป็นปกติการลอกช่องว่างและแปลงเป็นอักขระตัวพิมพ์ใหญ่
testnino.normalise ('aa 00 00 00 a') // aa000000atestnino.normalise ('BB 123456 b') // bb123456b
สามารถใช้เป็นไพรเมอร์สำหรับฟังก์ชัน
validate
มาตรฐานทั้งหมดดำเนินการโดยใช้ Benchmark.js บนโหนด v18.16.0 การนำเข้า CommonJS ใช้สำหรับแพ็คเกจทั้งหมดเพื่อให้สิ่งต่าง ๆ เป็นธรรม คุณสามารถเรียกใช้เกณฑ์มาตรฐานด้วยตัวเองจากโฟลเดอร์ benchmarks
ผลลัพธ์ได้รับการปัดเศษเป็นตัวเลขสำคัญ 3 ตัวเพื่อให้ความแปรปรวนระหว่างการวิ่งราบรื่นขึ้นและให้ผลลัพธ์ที่เปรียบเทียบได้มากขึ้น
test-nino
นั้น เร็วกว่าตัวสร้างหมายเลข NI แบบสุ่มที่เร็วที่สุดครั้งต่อไปมากกว่า 2.6x :
บรรจุุภัณฑ์ | รุ่น | ops/sec |
---|---|---|
ปลอมนิโน | 0.0.1 | 5,810,000 |
แบบสุ่ม _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
สร้างขึ้นแตกต่างกันและเก็บรายการคำนำหน้าทั้งหมดที่ถูกต้องซึ่งจะถูกเลือกโดยการสุ่ม ไม่มีลูปส่งผลให้ประสิทธิภาพที่สอดคล้องกันซึ่งไม่รับประกันกับแพ็คเกจอื่น ๆ
test-nino
นั้น เร็วกว่าฟังก์ชั่นการตรวจสอบที่เร็วที่สุดมากกว่า 14 เท่า เมื่อตรวจสอบความถูกต้องของ Nino ที่ถูกต้อง:
บรรจุุภัณฑ์ | รุ่น | ถูกต้อง (AA000000A) | ไม่ถูกต้อง (a) | ไม่ถูกต้อง (เป็นโมฆะ) | ไม่ถูกต้อง (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 |
แพ็คเกจอื่น ๆ ส่วนใหญ่ขึ้นอยู่กับรูปแบบ regex ฟังก์ชั่นการตรวจสอบใน
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 ตัวสำหรับตัวอักษรตัวแรก และ 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 (1 ล้าน) ของตัวเลขหกตัว
การรวมสิ่งนี้ทั้งหมดเข้าด้วยกันจำนวน Ninos ที่เป็นไปได้ที่เป็นไปได้จะเป็น:
373 (สำหรับตัวอักษรสองตัวแรก) x 10^6 (สำหรับหมายเลขหก) x 4 (สำหรับตัวอักษรสุดท้าย) = 1,492,000,000 Ninos ที่เป็นไปได้