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

بازدید: 3390 بازدید

قطعه کد چک کردن صحیح بودن کد ملی به زبان 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

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

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

مطالعه بیشتر