أسرع مولد نينو (رقم التأمين الوطني في المملكة المتحدة) ومقحة. يولد ويؤكد أرقام NI في المملكة المتحدة إلى مواصفات NIM39110 على Gov.uk.
test-nino
عبارة عن أداء يركز على الأداء وليس له أي تبعيات. المعايير تتحدث عن نفسها.
ابدء
ثَبَّتَ
يستورد
الوظائف المتاحة
عشوائي
تدريجي
التحقق
تطبيع
المعايير
ما هو رقم التأمين الوطني في المملكة المتحدة؟
كم عدد أرقام التأمين الوطنية الصالحة في المملكة المتحدة؟
يمكنك تثبيت حزمة Test-Nino من NPM:
npm i test-nino
// esm/typescriptimport * كـ testnino من 'test-nino' ؛ // commonjsconst testnino = require ('test-nino') ؛ // denoimport * as testnino from "https://deno.land/x/test_nino@vx@vx@vx .xx/mod.ts "؛
تستخدم لتوليد نينو عشوائي:
const nino = testnino.random () ؛ // إرجاع رقم التأمين الوطني في المملكة المتحدة على سبيل المثال AA000000A
تحذير: لا يضمن أنك لا تستطيع إنشاء نفس النينو أكثر من مرة باستخدام هذه الطريقة. إذا كنت تحتاج إلى نينو فريد في كل مرة ، أقترح عليك استخدام المولد الإضافي.
هذه الطريقة هي الأفضل إذا كنت تريد التأكد من عدم إنشاء نينو مكررة. تستخدم هذه الوظيفة مولد JavaScript للتعداد من خلال جميع أرقام NI صالحة في المملكة المتحدة AA000000A-ZY999999D
(هناك 1،492،000،000 من المجموع).
سوف يعتمد المولد على البادئة والرقم ثم لاحقة.
// إنشاء مولد instanceconst uniquenigenerator = testnino.incremental () ؛ for (دع i = 0 ؛ i <= 10000000 ؛ i ++) {uniquenigenerator.next () سيعود {value: 'aa000000a' ، تم القيام به: false} // على التكرار الثاني الذي سيعود {value: 'aa000000b' ، تم القيام به: false} // ...// على التكرار 10000000th سوف يعود {value: 'AC500000A' ، تم: false}}
لن
true
الخاصيةdone
إلا بمجرد تعداد جميع المجموعات الممكنة.
ستؤدي هذه الوظيفة إلى التحقق من صحة النينو المقدمة وإرجاع كائن تفاصيل تم تمرير القواعد أو فشلت.
من المتوقع أن يكون النينو بالفعل بدون تنسيق وما إلى ذلك - يمكنك استخدام
normalise
لإعداد النينو إذا لزم الأمر.
// a ninotestnino.validate صالحة ("AB123456C") ؛ // {// القواعد: {// النوع: true ، // الطول: صواب ، // بادئة: صواب ، // الرقم: true ، // الملأمة: صحيح //} ، // النتيجة: true //} // ninotestnino.validate (1) ؛ // {// القواعد: {// اكتب: false ، //} ، // النتيجة: false //}
سيكون للكائن الذي تم إرجاعه دائمًا خاصية
outcome
، لكن الوظيفة تفشل بسرعة ، وبالتالي ستُرجع فقط نتيجة لكل عنصر تم اختباره في النينو.
هذه الوظيفة ستطبيع النينو ، وتجريد المسافة البيضاء وتحويلها إلى أحرف كبيرة.
testnino.normalise ('aa 00 00 00 a') // aa00000000atestnino.normalise ('BB 123456 b') // BB123456B
يمكن استخدام هذا كتمهيدي لوظيفة
validate
يتم تشغيل جميع المعايير باستخدام Benchmark.js على العقدة V18.16.0. يتم استخدام واردات CommonJS لجميع الحزم للحفاظ على الأشياء عادلة. يمكنك تشغيل المعايير بنفسك من مجلد benchmarks
. تم تقريب النتائج إلى 3 أرقام مهمة لتنعيم الفروق بين الركض وتوفير نتائج أكثر قابلية للمقارنة.
test-nino
هو أكثر من 2.6x أسرع من أسرع مولد NI العشوائي التالي:
طَرد | إصدار | OPS/ثانية |
---|---|---|
مزيف نينو | 0.0.1 | 5،810،000 |
Random_uk_nino | 1.0.3 | 6،340،000 |
Avris-Generator | 0.8.2 | 2900،000 |
اختبار نينو | أحدث | 17،000،000 |
تستخدم الحزم الأخرى حلقات تمر بعملية
Generate random NINO > is it valid? > no > repeat
، حتى يتم إعطاء نينو صالح. هذا يكلف وقت وحدة المعالجة المركزية الثمينة ويمنع حلقة حدث العقدة. تم تصميمtest-nino
بشكل مختلف وبدلاً من ذلك يخزن القائمة الكاملة للبادئات الصالحة التي يتم بعد ذلك اختيارها عشوائيًا. لا توجد حلقات تؤدي إلى أداء ثابت غير مضمون مع الحزم الأخرى.
test-nino
هو أكثر من 14x أسرع من وظيفة التحقق من صحة أسرع عند التحقق من صحة نينو صالحة:
طَرد | إصدار | صالح (AA000000A) | غير صالح (أ) | غير صالح (لاغ) | غير صالح (AAX00000A) | غير صالح (AA00000XA) |
---|---|---|---|---|---|---|
صالح نينو | 1.0.0 | 34،000،000 | 84،600،000 | 64،100،000 | 75200،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:
يتكون النينو من رسالتين ، 6 أرقام ولاحقة ، والتي هي دائمًا A أو B أو C أو D.
يبدو شيئًا من هذا القبيل: QQ 12 34 56 أ
جميع البادئات صالحة باستثناء:
لا يتم استخدام الأحرف D و F و I و Q و U و V كحرف أول أو ثاني من بادئة Nino.
لا يتم استخدام الحرف O كحرف الثاني من البادئة.
لا يتعين استخدام البادئات BG و GB و KN و NK و NT و TN و ZZ
أولاً ، دعنا ننظر في القيود المفروضة على أول رسالتين من بادئة نينو:
لا يتم استخدام الأحرف D و F و I و Q و U و V كحرف أول أو ثاني من البادئة ، لذلك هناك 20 خيارًا محتملاً للحرف الأول (AZ باستثناء D ، F ، I ، Q ، U و v) و 19 خيارًا ممكنًا للحرف الثاني (AZ باستثناء D و F و I و Q و U و V و O).
لا يتعين استخدام البادئات BG و GB و KN و NK و NT و TN و ZZ ، لذلك هناك 20 × 19 - 7 = 373 مجموعات محتملة من الحرفين الأولين.
بعد ذلك ، دعونا نفكر في القيود المفروضة على الرسالة النهائية ، وهي اللاحقة:
لا يمكن أن تكون اللاحقة سوى A أو B أو C أو D ، لذلك هناك 4 لاحقة محتملة.
أخيرًا ، لننظر في الأرقام الستة في نينو:
يمكن أن يكون لكل من الأرقام الستة 10 قيم ممكنة (0-9) ، لذلك هناك 10^6 (1 مليون) مجموعات ممكنة من الأرقام الستة.
تجمع كل هذا معًا ، سيكون عدد النينو الفريد الممكنة:
373 (بالنسبة للرسالة الأولى) x 10^6 (للأرقام الستة) × 4 (للحرف النهائي) = 1،492،000،000 ninos ممكن.