اعتبارسنجی کدملی با استفاده از php

[short_link]
در بعضی از فروشگاه های آنلاین و یا آموزشگاه های آنلاین، فیلدی به نام فیلد کدملی هست که علاوه بر اینکه در زمان ورود اطلاعات باید درستی تعداد کاراکترها بررسی بشه باید خود کدملی هم اعتبارسنجی بشه و طبق فرمولی که داره باید بررسی بشه که آیا کدملی که کاربر وارد کرده آیا درست هست یا نه . برای اینکار می تونیم یه فانکشن تعریف کنیم و در هر جای قالب و یا افزونه نیاز بود ازش استفاده کنیم

اعتبارسنجی کدملی:

کد ملی شماره ای است 10 رقمی که از سمت چپ سه رقم کد شهرستان محل صدور شناسنامه ، شش رقم بعدی کد منحصر به فرد برای فرد دارنده شناسنامه در شهرستان محل صدرو و رقم آخر آن هم یک رقم کنترل است که از روی 9 رقم سمت چپ بدست می آید. برای بررسی کنترل کد کافی است مجدد از روی 9 رقم سمت چپ رقم کنترل را محاسبه کنیم

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

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

از آنجایی که درسیستم کد ملی معمولا قبل از کد  تعدادی صفر وجود دارد.(رقم اول و رقم دوم از سمت چپ کد ملی ممکن است صفر باشد) و در بسیاری از موارد ممکن است کاربر این صفرها را وارد نکرده باشد و یا نرم افزار این صفرها را ذخیره نکرده باشد بهتر است قبل از هر کاری در صورتی که طول کد بزرگتر مساوی 8 و کمتر از 10 باشد  به تعداد لازم (یک تا دو تا صفر) به سمت چپ عدد اضافه کنید. ساختار کد ملی در زیر نشان داده شده است

ارقام کدملی

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

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

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

 

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

بررسی صحت کدملی

حاصل جمع ضرب ارقام 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 است پس کد مورد نظر به عنوان یک کد معتبر قابل قبول نیست.

 

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;
}
(2) دیدگاه برای این پست ثبت شده
دیدگاه خود را بفرستید
  1. #1 | پنجشنبه 1402/05/19 [04:00 ق.ظ]

    سلام دوست گرامی، بابت کد بسیار سپاسگزارم.
    من با افزونه checkout field editor می‌تونم یک فیلد متنی اضافه کنم به اسم شماره ملی. چطور می‌تونم این کنترلگر رو به فیلد جدیدم ارتباط بدم؟
    لینک افزونه: https://wordpress.org/support/plugin/woo-checkout-field-editor-pro/

    • پنجشنبه 1402/05/19 [11:14 ق.ظ] | #2

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

« اعتبارسنجی شماره تلفن همراه در صفحه تسویه حساب ووکامرس
دانلود قالب استارتر ویژال کامپوزر »