قطعه کد چک کردن صحیح بودن کد ملی به زبان PHP
function check_national_code($code) { if(!preg_match('/^[0-9]{10}$/',$code)) return false; for($i=0;$i<10;$i++) if(preg_match('/^'.$i.'{10}$/',$code)) return false; for($i=0,$sum=0;$i<9;$i++) $sum+=((10-$i)*intval(substr($code, $i,1))); $ret=$sum%11; $parity=intval(substr($code, 9,1)); if(($ret<2 && $ret==$parity) || ($ret>=2 && $ret==11-$parity)) return true; return false; }
قطعه کد چک کردن صحیح بودن کد ملی به زبان Java Script
function checkCodeMeli(code) { var L=code.length; if(L<8 || parseInt(code,10)==0) return false; code=('0000'+code).substr(L+4-10); if(parseInt(code.substr(3,6),10)==0) return false; var c=parseInt(code.substr(9,1),10); var s=0; for(var i=0;i<9;i++) s+=parseInt(code.substr(i,1),10)*(10-i); s=s%11; return (s<2 && c==s) || (s>=2 && c==(11-s)); return true; }
توضیح در رابطه با الگوریتم
امروزه در اکثر نرم افزارهای تولیدی نیاز به استفاده از کد ملی به عنوان یک مشخصه منحصر به فرد برای اطلاعات فردی و شناسایی افراد می باشد.
از طرفی متاسفانه در حال حاضر هیچ الگوریتمی برای تشخیص صحت کد ورودی در اختیار برنامه نویسان وجود ندارد و مشکلات زیادی را ایجاد کرده است.
اخیرا با توجه به نیاز خودم در سایت الگوریتم مربوط به کنترل صحت کد ملی را بدست آوردم و چون مطمئن هستم افراد زیادی هم همین نیاز را دارند روال انجام کار را در این مقاله توضیح می دهم و امیدوارم که به دردتون بخوره.
همانطور که می دانید کد ملی شماره ای است ۱۰ رقمی که از سمت چپ سه رقم کد شهرستان محل صدور شناسنامه ، شش رقم بعدی کد منحصر به فرد برای فرد دارنده شناسنامه در شهرستان محل صدرو و رقم آخر آن هم یک رقم کنترل است که از روی ۹ رقم سمت چپ بدست می آید.
برای بررسی کنترل کد کافی است مجدد از روی ۹ رقم سمت چپ رقم کنترل را محاسبه کنیم
از آنجایی که درسیستم کد ملی معمولا قبل از کد تعدادی صفر وجود دارد.(رقم اول و رقم دوم از سمت چپ کد ملی ممکن است صفر باشد) و در بسیاری از موارد ممکن است کاربر این صفرها را وارد نکرده باشد و یا نرم افزار این صفرها را ذخیره نکرده باشد بهتر است قبل از هر کاری در صورتی که طول کد بزرگتر مساوی ۸ و کمتر از ۱۰ باشد به تعداد لازم (یک تا دو تا صفر) به سمت چپ عدد اضافه کنید. ساختار کد ملی در زیر نشان داده شده است
ساختار کد ملی | ||||||||||
ارقام کد | رقم کنترل | ۹ رقم سمت چپ کد ملی | ||||||||
موقعیت | ۱ | ۲ | ۳ | ۴ | ۵ | ۶ | ۷ | ۸ | ۹ | ۱۰ |
۱- برای محاسبه رقم کنترل از روی سایر ارقام ، هر رقم را در موقعیت آن ضرب کرده و حاصل را با هم جمع می کنیم.
۲- مجموع بدست آمده از مرحله یک را بر ۱۱ تقسیم می کنیم
۳- اگر باقیمانده کمتر از ۲ باشد ، رقم کنترل باید برابر باقیمانده باشد در غیر اینصورت رقم کنترل باید برابر یازده منهای باقیمانده باشد
مثال : آیا کد ۷۷۳۱۶۸۹۹۵۱ یک کد ملی معتبر است؟
برای این منظور کد حاصل جمع ضرب ارقام ۲ الی ۱۰ را در موقعیت آنها محاسبه می کنیم
ساختار کد ملی | ||||||||||
ساختار کد | رقم کنترل | ۹ رقم سمت چپ کد ملی | ||||||||
ارقام کد | ۱ | ۵ | ۹ | ۹ | ۸ | ۶ | ۱ | ۳ | ۷ | ۷ |
موقعیت | ۱ | ۲ | ۳ | ۴ | ۵ | ۶ | ۷ | ۸ | ۹ | ۱۰ |
محاسبه حاصل ضرب | ۱۰ | ۲۷ | ۳۶ | ۴۰ | ۳۶ | ۷ | ۲۴ | ۶۳ | ۷۰ |
۷*۱۰+۷*۹+۳*۸+۱*۷+۶*۶+۸*۵+۹*۴+۹*۳+۵*۲=۳۱۳
۳۱۳÷۱۱=۲۸ و R=5
چون باقیمانده برابر ۵ و بزرگتر مساوی ۲ است پس باید رقم کنترل این کد برابر ۶ ( یازده منهای ۵ برابر ۶)باشد.
با دقت در کد متوجه می شویم که رقم کنترل ورودی برابر ۱ است پس کد مورد نظر به عنوان یک کد معتبر قابل قبول نیست.