از این تابع میتونی استفاده کنی
function check_national_code($value)
{
if(!preg_match('/^[0-9]{10}$/',$value)) {
return (bool) false;
}
for($i=0;$i<10;$i++)
if(preg_match('/^'.$i.'{10}$/',$value)) {
return (bool) false;
}
for($i=0,$sum=0;$i<9;$i++)
$sum+=((10-$i)*intval(substr($value, $i,1)));
$ret=$sum%11;
$parity=intval(substr($value, 9,1));
if(($ret<2 && $ret==$parity) || ($ret>=2 && $ret==11-$parity)) {
return (bool) true;
}
return (bool) false;
}سلام
شماره کد ملی دارای ده رقم در سه گروه ۳، ۶ و ۱ رقمی است که سه رقم اول مربوط به محل تولد میباشد. در کارت بین سه گروه رقمها با خط تیره فاصلهگذاری شدهاست ولی معمولا هنگام درج مشخصات و کد ملی نیازی به جداگانهنویسی ارقام وجود ندارد و از چپ به راست ده رقم پشت سرهم نوشته میشوند.
کد ملی شمارهای است ۱۰ رقمی که از سمت چپ سه رقم کد شهرستان محل صدور شناسنامه، شش رقم بعدی کد منحصربهفرد برای فرد دارنده شناسنامه در شهرستان محل صدور و رقم آخر آن هم یک رقم کنترل است که از روی ۹ رقم سمت چپ بهدست میآید. برای راستیآزمایی کد کافی است کد ملی خود را بدون خط تیره در فیلد زیر وارد کرده تا صحت کد ملی مشخص گردد. درصورتی که کد با صفر شروع شده حتما عدد صفر هم وارد شود.
@ftp
شاید پاسخ شما همینجا باشد
سلام دوست عزیز.باید اول یک RULE ایجاد کنی و سپس این کد رو بزار و استفاده کن :
`if(!preg_match('/^[0-9]{10}$/',$value)) return false; for($i=0;$i<10;$i++) if(preg_match('/^'.$i.'{10}$/',$value)) return false; for($i=0,$sum=0;$i<9;$i++) $sum+=((10-$i)*intval(substr($value, $i,1))); $ret=$sum%11; $parity=intval(substr($value, 9,1)); if(($ret<2 && $ret==$parity) || ($ret>=2 && $ret==11-$parity)) return true; return false;`چرا این فانکشن، true و false رو cast کرده؟ @ali.bayat
@muhammad
این کد داخل یک پکیج ولیدیشن های فارسی هست
به نظر من هم زیاده رویه که true & false رو دوباره bool کنی