PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تابع چک کردن صحت کد ملی



omid1991
September 13th, 2016, 15:10
سلام و عرض ادب خدمت کاربران گرامی

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

قبل از آموزش منابع رو معرفی میکنم
منبع اول : علی آرش (http://omidtak.ir/http://www.aliarash.com/article/codemeli/codemeli.htm)
منبع دوم : رضا شیخله (http://omidtak.ir/http://www.rezaonline.net/blog/php-function-check-national-code.html)
منبع سوم (خودم رفع باگ منابع اول و دوم) : امید آران (http://omidtak.ir/post/25)

در منابع اول و دوم بسیار کامل توضیح داده شده ولی متاسفانه باگی در هر دو کد وجود داره
میشه با وارد کرد عددی مثل 1111111111 این تابع رو دور زد.
ولی بنده اون باگ رو رفع کردم و کامل آماده استفاده هستش



function CheckNationalCode($code='')
{
$code = (string) preg_replace('/[^0-9]/','',$code);
if(strlen($code)>10 or strlen($code)<8)
return false;

// --- Added by omid Aran ---
$code = str_pad($code, 10, 0, STR_PAD_LEFT);
for($i=0; $i<10; $i++)
$blist[] = str_pad($i, 10, $i, STR_PAD_LEFT);

if(in_array($code, $blist))
return false;
// ------------------------

$list_code = str_split($code);
$last = (int) $list_code[9];
unset($list_code[9]);
$i = 10;
$sum = 0;
foreach($list_code as $key=>$_)
{
$sum += intval($_) * $i;
$i--;
}

$mod =(int) $sum % 11;
if($mod >= 2)
$mod = 11 - $mod;

return $mod == $last;
}

$code = 1231234567;
if(CheckNationalCode($code))
echo 'ok';
else
echo 'err';

mibfa
September 13th, 2016, 19:18
این باگ در سایت نیک هم است (:

rezaonline.net
September 13th, 2016, 23:20
آفرین امید :)