-->
راستی آزمایی کد ملی دایرکتیو

راستی آزمایی کد ملی ایران با دیرکتیور AngularJS

هم‌خوان کنید در:

همان‌طور که میدانید کد ملی، عددی ده‌رقمی و منحصربه‌فرد است که جهت احراز هویت و شناسایی هر فردِ حقیقیِ ایرانی، به وی تخصیص داده‌شده است. گاهی در پروژه‌های نرم‌افزاری، لازم است تا اطلاعات افراد حقیقی به شکلی معتبر، طبقه‌بندی شوند. اگر قواعد کسب‌وکار شما تصریح می‌کند که اشخاص حقیقی با کد ملی‌شان طبقه‌بندی شوند، در این صورت دریافت کد ملی و راستی آزمایی آن یکی از چالش‌هایتان در مسیر توسعه خواهد بود.

به‌طور منطقی، اعتبارسنجی کد ملی ایران به دو بخش مجزا از هم تفکیک‌شده است:

  • راستی آزمایی شکلی
  • راستی آزمایی هویتی

راستی آزماییِ هویتی به فرآیندی اشاره دارد که طی آن ارتباطِ واقعیِ کد ملی با یک فرد حقیقی، مورد ارزیابی قرار می‌گیرد. به‌عنوان‌مثال می‌توان به این گزاره اشاره کرد: آیا کد  ۱-۶۲۲۴۳۳-۲۲۸ متعلق به آقای شریفی است یا خیر! که البته پرداختن به این نوع اعتبارسنجی در محدوده‌ی این نوشتار نیست و فرصتی دیگر می‌طلبد.

اما کد ملی، همانند تمامی کدهای تشخیصی و سریالی، همچون بارکدها، سریال چک‌های تضمینی، سریال شناسنامه، سریال کارت‌های اعتباری و غیره، جهت جلوگیری از سوءاستفاده و تقلب، دارای ساختارِ شکلیِ منطقی‌ای است که ارقام آن باهم می‌سازند. به‌عبارت‌دیگر هر رشته عددِ ده‌رقمیِ کد ملی، فارغ از اینکه به یک شخص حقیقی تعلق دارد یا خیر، به‌خودی‌خود یک کد ملی نیست! در این نوشتار به توصیف ابعاد این نوع راستی آزمایی و معرفی دیرکتیوِ ویژه‌ای جهت استفاده در پروژه‌های AngularJS پرداخته‌شده است.

الگوریتم تشخیص کد ملی

کد ملی شامل یک‌رشته‌ی ده‌رقمی از اعداد است که به سه بخش تقسیم می‌شوند. به جدول زیر دقت کنید:

۱ ۳ ۳ ۴ ۲ ۲ ۶ ۸ ۲ ۲
کد کنترلی کُد منحصربه‌فرد کُد شهرستان محل صدور
  • کد شهرستان، شناسه‌ای است که به محل صدور کد ملی (یا تولد) فرد، اشاره دارد.
  • شش رقم بعدی، عددی منحصربه‌فرد به ازای هر کد شهرستان است.
  • کد کنترل یا Check Digit ، عددی است تک‌رقمی که با اعمال الگوریتمی منطقی بر روی ۹ رقم پیشینش به دست می‌آید.
کد کنترلی یا Check Digit، ابزاری برای پرهیز از افزونگی و جلوگیری از خطاهای انسانی در ورود کدهای شناسایی از قبیل، حساب‌های بانکی و کدهای شناسایی است که از جهاتی با بیت توازن (Parity bit) در محاسبات دودویی رایانه‌ای قابل‌مقایسه است.

راستی آزمایی کُد کنترلی

اگر یک کد ده‌رقمی را به‌صورت یک مجموعه‌ی ۱۰ عضوی در نظر بگیریم و به هر عضو از این مجموعه با توجه به جایگاهش از سمت راست، ردیفِ متناظرش را اختصاص دهیم به شکل زیر خواهیم رسید:

ارقام ۱ ۳ ۳ ۴ ۲ ۲ ۶ ۸ ۲ ۲
جایگاه ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰

برای تشخیص صحتِ کد کنترلی در یک کد ملی، هر عضو (به‌غیراز کد کنترلی) را در موقعیتش ضرب کرده و حاصل را باهم جمع می‌کنیم. اگر باقیمانده‌ی تقسیم این حاصلِ جمع بر عدد ۱۱، کوچک‌تر از ۲ بود، کد کنترلی باید برابر باقی‌مانده باشد و اگر بزرگ‌تر از ۲ بود کد کنترلی باید برابر ۱۱ منهای باقیمانده باشد. در غیر این صورت کد ملی ازنظر شکلی نامعتبر است.

راستی آزمایی کد ملی ایران با دایرکتیور AngularJS

 

قواعد شکلیِ دیگر

علاوه بر کد کنترلی، دو قاعده‌ی شکلی دیگر نیز برای صحت کد ملی، حائز اهمیت‌اند:

  • کدی که با سه صفر شروع شود، کدی نامعتبر است. کد شهرستان محل صدور نمی‌تواند تماماً صفر باشد.
  • کدی که از ارقام تکراری تشکیل‌شده باشد، نامعتبر است. کدهای ۱-۱۱۱۱۱۱-۱۱۱ یا ۶-۶۶۶۶۶۶-۶۶۶ نامعتبر هستند حتی اگر در الگوریتم کد کنترلی، معتبر تشخیص داده شوند.
  • کدی که کمتر یا بیشتر از ۱۰ رقم داشته باشد، نامعتبر است.

دیرکتیو کد ملی ایران

اگر در پروژه‌ای مبتنی بر AngularJS، نیاز به اخذ ورودی کد ملی در فرم‌های خود داشتید، تمام امکانات فوق، به‌صورت یکجا در مجموعه‌ی angular-iran-nationa-id در دسترس است.

 

 

روش کار بسیار ساده است. ابتدا باید ماژول angular-iran-national-id را در پروژه‌ی خود بارگذاری و نصب کنید. بهترین روش استفاده از ابزار Bower برای نصب کتابخانه است:

و یا:

با توجه به ساختار پروژه، ممکن است نیاز به افزودن کتابخانه، به سربرگ فایل HTML خود داشته باشید.

مرحله‌ی بعدی، تزریق ماژول angular-iran-national-id به ماژول اپلیکیشن است.

این ماژول، دیرکتیوی به نام islet-iran-national-id را در اختیارتان قرار می‌دهد که می‌توانید در فیلدهای موردنظرتان، آزادانه از آن استفاده کنید:

این دیرکتیو، در صورت معتبر نبودنِ مقدار واردشده، به‌طور ویژه کلاسی به اسم ng-invalid-iran-national-id به فیلد موردنظر اضافه می‌کند که می‌توانید از آن برای رنگ‌آمیزی یا شخصی‌سازی فیلد بهره بگیرید.

نکته: به علت موجود بودن دیرکتیوهای کمکی پیش‌ساخته، از پیاده سازی مجدد آن‌ها در دیرکتیو کد ملی پرهیز شده است. به همین منظور برای محدود کردن طول ورودی به حداکثر مجازِ کد ملی (ده رقم) از دیرکتیوهای پیش‌ساخته‌ی maxlength و minlength استفاده کنید.

See the Pen angular-iran-national-id with form by Soheil Samadzadeh (@sszdh) on CodePen.0


هم‌خوان کنید در:
سهیل صمدزاده

سهیل صمدزاده

من سهیل صمدزاده؛ مشاور چابک سازی گروه‌های نرم‌افزاری، توسعه‌دهنده، مدیر محصول نرم‌افزاری و وبلاگ نویس هستم. به فنّاوری و تفکرات چابک در توسعه نرم‌افزار علاقه‌مندم و سعی می‌کنم در اینجا خُرده دانش‌هایم را با شما به اشتراک بگذارم.


دیدگاه‌های شما ارزشمند‌اند...

6 دیدگاه‌ها برای "راستی آزمایی کد ملی ایران با دیرکتیور AngularJS"

خبر بده وقتی
avatar
1024

چینش بر اساس:   جدیدترین‌ها | قدیمی‌ترین‌ها
حسین
میهمان
حسین
2 ماه 19 روز پیش

سلام

ممنون خیلی عالی بود من توی یک پروژه ازش استفاده کردم
فقط یک سوال اینکه وقتی از ولیدیشن شما استفاده میکنم با اینتر فرمم کار نمیکنه
ممنون میشم اگه راهکاری برای این بدید.

وی‌پی‌دیسکاز

به کانال تلگرام آیلِتـــ بپیوندید!

t_logo

آیلِتـــ هر ماه در صندوق ایمیل شما: