theme wordpress
برنامه نویسی

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

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

اردیبهشت ۲۱, ۱۳۹۰

در این مقاله می خواهیم به شما طریقه تشخیص صحت کد ملی را که ممکن است در زبانهای برنامه نویسی مختلف و در فرمهای ورود اطلاعات مورد نیاز شما باشد را آموزش دهیم .
همانطور که می دانید همه ارگانها و سازمانهای دولتی جمهوری اسلامی و شرکتهای تابعه موظف شده اند از این پس فیلد جدیدی در کنار مشخصات افراد به نام کد ملی درج نمایند و تقریبا همه هموطنان عزیز در حال حاضر کارت ملی را دارند. ولی ما به عنوان یک برنامه نویس وقتی در فرمی کد ملی را دریافت می کنیم چگونه از صحت کد وارد شده مطمئن شویم ؟
سازمان ثبت احوال کشور در راستای ارائه کارت ملی روشی را برای تولید کدهای ملی استفاده نموده است که با استفاده از آنها می توانیم کدهایی داشته باشیم که از امنیت بالایی برخوردار باشند و همچنین قابلیت تقلب نداشته باشند.
همه کدهای ملی ۱۰ رقمی هستند و هیچگاه نمیشود اعداد آن یکسان باشد

کد ملی شماره ای است ۱۰ رقمی که از سمت چپ سه رقم کد شهرستان محل صدور شناسنامه ، شش رقم بعدی کد منحصر به فرد برای فرد دارنده شناسنامه در شهرستان محل صدرو و رقم آخر آن هم یک رقم کنترل است که از روی ۹ رقم سمت چپ بدست می آید. برای بررسی کنترل کد کافی است مجدد از روی ۹ رقم سمت چپ رقم کنترل را محاسبه کنیم

از آنجایی که درسیستم کد ملی معمولا قبل از کد  تعدادی صفر وجود دارد.(رقم اول و رقم دوم از سمت چپ کد ملی ممکن است صفر باشد) و در بسیاری از موارد ممکن است کاربر این صفرها را وارد نکرده باشد و یا نرم افزار این صفرها را ذخیره نکرده باشد بهتر است قبل از هر کاری در صورتی که طول کد بزرگتر مساوی ۸ و کمتر از ۱۰ باشد  به تعداد لازم (یک تا دو تا صفر) به سمت چپ عدد اضافه کنید. ساختار کد ملی در زیر نشان داده شده است

۱- روش اول:

ساختار کد ملی
ارقام کد رقم کنترل ۹ رقم سمت چپ کد ملی
موقعیت ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰

۱- برای محاسبه رقم کنترل از روی سایر ارقام ، هر رقم را در موقعیت آن ضرب کرده و حاصل را با هم جمع می کنیم.

۲- مجموع بدست آمده از مرحله یک را بر ۱۱ تقسیم می کنیم

۳- اگر باقیمانده کمتر از ۲ باشد ، رقم کنترل باید برابر باقیمانده باشد در غیر اینصورت رقم کنترل باید برابر یازده منهای باقیمانده باشد

مثال : آیا کد ۷۷۳۱۶۸۹۹۵۱ یک کد ملی معتبر است؟

برای این منظور کد

ساختار کد ملی
ساختار کد رقم کنترل ۹ رقم سمت چپ کد ملی
ارقام کد ۱ ۵ ۹ ۹ ۸ ۶ ۱ ۳ ۷ ۷
موقعیت ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰
محاسبه حاصل ضرب ۱۰ ۲۷ ۳۶ ۴۰ ۳۶ ۷ ۲۴ ۶۳ ۷۰

حاصل جمع ضرب ارقام ۲ الی ۱۰ را در موقعیت آنها محاسبه می کنیم

۷*۱۰+۷*۹+۳*۸+۱*۷+۶*۶+۸*۵+۹*۴+۹*۳+۵*۲=۳۱۳

۳۱۳÷۱۱=۲۸ و R=5

چون باقیمانده برابر ۵ و بزرگتر مساوی ۲ است پس باید رقم کنترل این کد برابر ۶ ( یازده منهای ۵ برابر ۶ )باشد.

با دقت در کد متوجه می شویم که رقم کنترل ورودی برابر ۱ است پس کد مورد نظر به عنوان یک کد معتبر قابل قبول نیست.

۲- روش اعتبار سنجی کد ملی :

دهمین رقم شماره ملی را ( از سمت چپ ) به عنوان A در نظر می گیریم.
یک مقدار B در نظر می گیریم و آن را برابر با :

(اولین رقم * ۱۰) + ( دومین رقم * ۹ ) + ( سومین رقم * ۸ ) + ( چهارمین رقم * ۷ ) + ( پنجمین رقم * ۶) + ( ششمین رقم * ۵ ) + ( هفتمین رقم * ۴ ) + ( هشتمین رقم * ۳ ) + ( نهمین رقم * ۲ )

قرار می دهیم.

مقدار Cرا برابر با B – (B/11)*11 قرار می دهیم.

اگر مقدار Cبرابر با صفر باشد و مقدار Aبرابر Cباشد کد ملی صحیح است.

اگر مقدار Cبرابر با ۱ باشد و مقدار Aبرابر با ۱ باشد کد ملی صحیح است.

اگر مقدار Cبزرگتر از ۱ باشد و مقدار A برابر با ۱۱ – Cباشد کد ملی صحیح است.

تابع جاوا اسکریپت :

 

برای فراخوانی تابع بالا میتوانید به صورت زیر عمل کنید : ( به عنوان مثال میخواهیم کد ملی ۰۰۱۱۴۹۹۶۱۳ را بررسی کنیم ) :
 

حال اگر کد ملی اشتباه باشد False و اگر صحیح باشد True برگردانده می شود .

تابع php :

برای فراخوانی تابع بالا میتوانید به صورت زیر عمل کنید : ( به عنوان مثال میخواهیم کد ملی ۰۰۱۱۴۹۹۶۱۳ را بررسی کنیم ) :
حال اگر کد ملی اشتباه باشد False و اگر صحیح باشد ۱ برگردانده می شود .

منبع : سروش طیبی   و  شرکت مهندسی رایانه گستر آرش

برچسب ها
نمایش بیشتر

محمد مهدی دولت آبادی

محمد مهدی دولت آبادی فارغ التحصیل رشته مهندسی نرم افزار کامپیوتر، بنیانگذار و موسس سایت نیکروسافت | تحلیل تخصصی نرم افزار در حال حاضر کارشناس حوزه فناوری اطلاعات شبکه بانکی هستم. سوابق و تجربیاتی نیز در حوزه برنامه نویسی،بانکهای اطلاعاتی و سیستم عامل دارم. نیکروسافت را به منظور اشتراک سواد کامپیوتری خود با سایر فعالان این حوزه راه اندازی نموده ام.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بستن