تابع چک کردن صحت کد ملی

Mohammad

مدیر انجمن
عضو کادر مدیریت
6/4/08
15,097
123
63
30
PersianScript
شاید بسیار برایتان پیش آمده باشد که در پروژه ای لازم هست که شماره ملی کاربر را دریافت کنید و شاید تا الان تنها اعتبارسنجی که انجام میدادید چک کردن ده رقمی بودن و فقط عدد بودن کد ملی بوده . بنا به دلایلی لازم شد که واقعا صحت کد ملی کاربر را بوسیله آلگوریتمی تشخیص دهیم


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

    if(strlen($code)==8)
        $code = "00".$code;

    if(strlen($code)==9)
        $code = "0".$code;

    $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;
}
منبع:


کد:
blog.rezaonline.net
 

hannanstd.ir

مدیر انجمن و توسعه دهنده ووکامرس پارسی
27/9/12
3,478
2
38
لنگرود
دوستانی که تمایل دارند بدونن الگوریتمش از کجا اومده اینجا رو بخونن :

تشخیص صحت کد ملی

- - - Updated - - -

دوستان عزیز . من یه کد دیگه پیدا کردم که این الگوریتم رو تو چند تا زبان برنامه نویسی پیاده کرده :

https://gist.github.com/ebraminio/5292017

- - - Updated - - -

البته یک نمونه کد جاوا اسکریپتش رو براتون پیوست میکنم :


کد:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <meta http-equiv="content-language" content="fa-IR" />
    <title>AMIB</title>
    <script type="text/javascript">//<!--
        function checkMelliCode(meli_code) {
            if (meli_code.length == 10) {
                if (meli_code == '1111111111' ||
                    meli_code == '0000000000' ||
                    meli_code == '2222222222' ||
                    meli_code == '3333333333' ||
                    meli_code == '4444444444' ||
                    meli_code == '5555555555' ||
                    meli_code == '6666666666' ||
                    meli_code == '7777777777' ||
                    meli_code == '8888888888' ||
                    meli_code == '9999999999') {
                    return false;
                }
                c = parseInt(meli_code.charAt(9));
                n = parseInt(meli_code.charAt(0)) * 10 +
                    parseInt(meli_code.charAt(1)) * 9 +
                    parseInt(meli_code.charAt(2)) * 8 +
                    parseInt(meli_code.charAt(3)) * 7 +
                    parseInt(meli_code.charAt(4)) * 6 +
                    parseInt(meli_code.charAt(5)) * 5 +
                    parseInt(meli_code.charAt(6)) * 4 +
                    parseInt(meli_code.charAt(7)) * 3 +
                    parseInt(meli_code.charAt(8)) * 2;
                r = n - parseInt(n / 11) * 11;
                if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r)) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
        //-->
    </script>
</head>

<body style="direction: rtl;">
    <p>
        <input id="national_code" type="text" /><br />
        <button type="button" id="check" onclick="checkMelliCode( document.getElementById( 'national_code' ).value ) ? alert ( 'OK' ): alert ( 'Error' );">بررسی کد ملی</button>
    </p>
</body>

</html>
که چون کدهای ملی که همه ارقام آنها مثل هم باشند تو الگوریتم صدق میکنند باید جدا بشند:

۰۰۰۰۰۰۰۰۰۰ ۱۱۱۱۱۱۱۱۱۱

۲۲۲۲۲۲۲۲۲۲

۳۳۳۳۳۳۳۳۳۳

۴۴۴۴۴۴۴۴۴۴

۵۵۵۵۵۵۵۵۵۵

۶۶۶۶۶۶۶۶۶۶

۷۷۷۷۷۷۷۷۷۷

۸۸۸۸۸۸۸۸۸۸

۹۹۹۹۹۹۹۹۹۹

 

harbiline

Edris
10/10/13
717
0
16
Gilan
چقدر صحت اعلام شماره ملی وارد شده مورد تائید هستش؟؟

مثلا کد ملی خودم رو بزنم بهم نشون میده؟؟ یه چیزی نشون داده میشه؟

 

hannanstd.ir

مدیر انجمن و توسعه دهنده ووکامرس پارسی
27/9/12
3,478
2
38
لنگرود
تو php به صورت true false برمیگردونه که میتونین تو برنامه هاتون ازش استفاده کنید .

توی جاوا اسکرپیته آره . میگه ok یا error

 

nokhodchy

تازه وارد
29/12/16
1
0
1
چقدر صحت اعلام شماره ملی وارد شده مورد تائید هستش؟؟

مثلا کد ملی خودم رو بزنم بهم نشون میده؟؟ یه چیزی نشون داده میشه؟
کد mysql برای این صحت سنجی کد ملی رو کسی داره؟ یه تابع که برای mysql نوشته شده باشه. اگه کسی این کد رو داشته باشه لطفا اینجا بذاره