الگوریتم تشخیص صحت کد ملی در PHP و جاوا اسکریپت

تعداد بازدید: 2301

کد ملی شماره ای است 10 رقمی که از سمت چپ

سه رقم اول: کد شهرستان محل صدور شناسنامه

شش رقم بعدی: کد منحصر به فرد برای فرد دارنده شناسنامه در شهرستان محل صدرو

رقم آخر آن هم یک رقم کنترل است که از روی 9 رقم سمت چپ بدست می آید.

برای بررسی کنترل کد کافی است مجدد از روی 9 رقم سمت چپ رقم کنترل را محاسبه کنیم.

ساختار کد ملی
ارقام کد رقم کنترل 9 رقم سمت چپ کد ملی
موقعیت 1 2 3 4 5 6 7 8 9 10

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

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

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

مثال : آیا کد 7731689951 یک کد ملی معتبر است؟

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

ساختار کد ملی
ساختار کد رقم کنترل 9 رقم سمت چپ کد ملی
ارقام کد 1 5 9 9 8 6 1 3 7 7
موقعیت 1 2 3 4 5 6 7 8 9 10
محاسبه حاصل ضرب   10 27 36 40 36 7 24 63 70

حاصل جمع ضرب ارقام 2 الی 10 را در موقعیت آنها محاسبه می کنیم.

7*10+7*9+3*8+1*7+6*6+8*5+9*4+9*3+5*2=313

313÷11=28 و R=5

چون باقیمانده برابر 5 و بزرگتر مساوی 2 است پس باید رقم کنترل این کد برابر 6 ( یازده منهای 5 برابر 6)باشد.

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

قطعه کد چک صحت کد ملی در PHP

function _custom_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;
}

مطالب تصادفی

سید خلیل حسینی

کارشناس کامپیوتر، علاقه مند و فعال در حوزه برنامه نویسی و طراحی سایت
برنامه نویس بک اند پی اچ پی و لاراول 
برنامه نویس فرانت اند
پلاگین نویس و طراح صفحات وردپرس

blog-author-image