نمایش نتایج: از شماره 1 تا 8 , از مجموع 8

موضوع: صحت سنجی کد ملی در پی اچ پی

  1. #1
    عضو انجمن fara_server آواتار ها
    تاریخ عضویت
    Feb 2012
    محل سکونت
    ایران
    نوشته ها
    187
    تشکر تشکر کرده 
    40
    تشکر تشکر شده 
    287
    تشکر شده در
    153 پست

    57 صحت سنجی کد ملی در پی اچ پی

    سلام دوستان
    مطلب زیر رو در سایت استاد کرامتی فر گرامی دیدم و گفتم خالی از لطف نیست اگر برای دوستان هم قرار بدم.در ذیل با نحوه اعتبار سنجی کد ملی کاربر در پی اچ پی آشنا خواهید شد.
    +
    همانطور که می دانید، کد ملی بعنوان یک شناسه ی منحصر به فرد (Unique ID) برای هر ایرانی محسوب می شود. در بعضی سایت ها ممکن است نیاز باشد تا کد ملی کاربر را بگیریم. بنابراین به الگوریتمی نیاز داریم تا بتوانیم از صحت کد ملی وارد شده توسط کاربر مطمئن شویم و در صورتیکه بصورت سهوی و یا عمدی اشتباه وارد شد، بتوانیم عملیات ثبت را متوقف کنیم و به کاربر اخطار دهیم.
    در همین راستا، تابعی در php نوشتم که کد ملی وارد شده را می گیرد و صحت آنرا بررسی می کند. اما قبل از بررسی تابع لازم است توضیحاتی در مورد الگوریتم آن بدهم.

    کد ملی یک شناسه ی 10 رقمی است که اعداد آن به سه دسته تقسیم می شوند:
    1- 3 رقم اول کد محل زندگی
    2- 6 رقم بعدی کد منحصر به فرد شخص
    3- رقم آخر عدد کنترل (Validation Number)
    الگوریتم Validation کد ملی بصورت ساده به این شرح است:
    از سمت چپ هر عدد ضربدر ارزش مکانی مع*** خود می شود.
    حاصل ضرب ها با هم جمع می شود.
    باقیمانده تقسیم حاصل جمع ها بر عدد 11 را بدست می آوریم.
    اگر عدد بدست آمده در باقیمانده ی تقسیم، کوچکتر مساوی 2 بود، همان عدد باید با Validation Number (عدد آخر کد ملی) برابر باشد.
    اگر عدد بدست آمده در باقیمانده ی تقسیم، بزرگتر از 2 بود، عدد را منهای 11 می کنیم و نتیجه باید برابر Validation Number (عدد آخر کد ملی) باشد.

    کد PHP:
    <?php
    function CheckNationalCode($code)
    {
          if(
    strlen($code) <> 10){
              echo 
    'کد ملی باید ده رقم باشد';
          }
          else
          {
              
    $codeArray str_split($code);
              
    $AllEq ;
              foreach(
    $codeArray as $item => $value)
              {
                  if(
    $codeArray[0] <> $value)
                  {
                      
    $AllEq false;
                      break;
                  }
                   else{ 
    $AllEq true;} 
              }
              if(
    $AllEq == true) die('اعداد کد ملی نمی توانند برابر هم باشند');
              
    $j 10;
              
    $sum 0;
              for(
    $i=0$i<=8$i++)
                {
                     
    $sum +=((int)($codeArray[$i])) * $j;
                     --
    $j;
                }
              
    $divid $sum 11;
                if (
    $divid <= 2)
                {
                   if(
    $codeArray[9]  == $divid)
                   {
                       echo 
    "کد ملی معتبر است";
                   }
                       echo 
    "کد ملی معتبر نیست"
                }
                else
                {
                    
    $divid1 11 $divid;
                    if (
    $codeArray[9]  == $divid1)
                    {
                          echo 
    "کد ملی معتبر است";
                    } 
                    else
                    {
                          echo 
    "کد ملی معتبر نیست";
                    }   
                }
            }       
    }     

    ?>
    نحوه ی کار این کد به این صورت است که یک کد ملی (nccode) را توسط متد POST دریافت می کند و به تابع CheckNationalCode می دهد تا صحت آنرا بررسی کند.
    این فانکشن را در قالب یک برنامه پی اچ پی که با استفاده از ajax کد ملی را Validat می کند، پیاده سازی کردم

    دانلود نمونه برنامه
    مشاهده ی نمونه برنامه


    منبع : وب سایت جناب آقای کرامتی فر
    کانفیگ،امنیت بخشی و راه اندازی انواع سروها با هزینه مناسب | طراحی و برنامه نویسی تحت وب | جهت درخواست از اینجا اقدام نمایید.
    --==--==--==--
    !Linux Geek


  2. تعداد تشکر ها ازfara_server به دلیل پست مفید


  3. # ADS




     

  4. #2
    عضو انجمن hpnn.wm آواتار ها
    تاریخ عضویت
    Aug 2010
    محل سکونت
    WHT
    نوشته ها
    350
    تشکر تشکر کرده 
    851
    تشکر تشکر شده 
    1,327
    تشکر شده در
    897 پست

    پیش فرض پاسخ : صحت سنجی کد ملی در پی اچ پی

    کد ملی برادر بنده 2740995849 هست که می گه اشتباه هست در حالی که واسه مال من درست می اره
    فکر نکنم الگوریتم شما درست باشه ؟

  5. #3
    عضو انجمن fara_server آواتار ها
    تاریخ عضویت
    Feb 2012
    محل سکونت
    ایران
    نوشته ها
    187
    تشکر تشکر کرده 
    40
    تشکر تشکر شده 
    287
    تشکر شده در
    153 پست

    پیش فرض پاسخ : صحت سنجی کد ملی در پی اچ پی

    سلام ،درمورد الگوریتم من 2 بار تست کردم (با چند کد ملی مختلف و پاسخ گرفتم)
    شاید حق با شما باشه ، تحقیق میکنم به نتیجه ای رسیدم در اینجا قرار میدم.
    با تشکر
    کانفیگ،امنیت بخشی و راه اندازی انواع سروها با هزینه مناسب | طراحی و برنامه نویسی تحت وب | جهت درخواست از اینجا اقدام نمایید.
    --==--==--==--
    !Linux Geek


  6. #4
    عضو انجمن fara_server آواتار ها
    تاریخ عضویت
    Feb 2012
    محل سکونت
    ایران
    نوشته ها
    187
    تشکر تشکر کرده 
    40
    تشکر تشکر شده 
    287
    تشکر شده در
    153 پست

    پیش فرض پاسخ : صحت سنجی کد ملی در پی اچ پی

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

    دهمین رقم شماره ملی را ( از سمت چپ ) به عنوان A در نظر می گیریم.
    یک مقدار B در نظر می گیریم و آن را برابر با :

    (اولین رقم * ۱۰) + ( دومین رقم * ۹ ) + ( سومین رقم * ۸ ) + ( چهارمین رقم * ۷ ) + ( پنجمین رقم * ۶) + ( ششمین رقم * ۵ ) + ( هفتمین رقم * ۴ ) + ( هشتمین رقم * ۳ ) + ( نهمین رقم * ۲ )


    قرار می دهیم.

    مقدار Cرا برابر با B – (B/11)*11 قرار می دهیم.



    اگر مقدار Cبرابر با صفر باشد و مقدار Aبرابر Cباشد کد ملی صحیح است.

    اگر مقدار Cبرابر با ۱ باشد و مقدار Aبرابر با ۱ باشد کد ملی صحیح است.

    اگر مقدار Cبزرگتر از ۱ باشد و مقدار A برابر با ۱۱ – Cباشد کد ملی صحیح است.
    همینطور یک کلاس که جناب آقای رضا شعاری نوشته بودند اینجا قرار میدم امیدوارم مفید باشه.
    کد PHP:
    <?php
    /** * In the name of God * * Validate National Iranian Code * * @package melliCode * @version 1.0.0 mellicode.class.php Wednesday, January 12, 2011 * @author Reza Sheari * @web http://www.Vvolf.net * @email r.sheari@gmail.com */
    class melliCode{    /**     * Hold National Code     *     * @access Protected     * @var Integer     */    protected static $nationalCode int;
        
    /**     * Incorrect List     *     * @access Protected     * @var Integer     */    protected static $notNationalCode = array(                                            "1111111111",                                             "2222222222",                                             "3333333333",                                             "4444444444",                                             "5555555555",                                             "6666666666",                                             "7777777777",                                             "8888888888",                                             "9999999999",                                             "0000000000");
        
    /**     * Construct     *     * @access Public     * @var Empty     */    public function __construct()    {            }
        
    /**     * National Validation Code     *     * @access Public     * @var Integer     */    public function nationalCode($code)    {        self::$nationalCode trim($code);
            if(
    self::validCode())        {            $melliCode self::$nationalCode;
                
    $subMid self::subMidNumbers($melliCode101);
                
    $getNum 0;
                for(
    $i 1$i 10$i++)                $getNum += (self::subMidNumbers($melliCode$i1) * (11 $i));
                
    $modulus = ($getNum 11);
                if(((
    $modulus 2) && ($subMid == $modulus)) || (($modulus >= 2) && ($subMid == (11 $modulus))))                return true;        }
            return 
    false;    }
        
    /**     * Validate     *     * @access Protected     * @var Boolean     */    protected function validCode()    {        $melliCode self::$nationalCode;
            if((
    is_numeric($melliCode)) && (strlen($melliCode) == 10) && (strspn($melliCode$melliCode[0]) != strlen($melliCode)))            return true;
            return 
    false;    }
        
    /**     * Get Portion of String Specified     *     * @access Protected     * @var Integer     */    protected function subMidNumbers($number$start$length)    {        $number substr($number, ($start 1), $length);
            return 
    $number;    }}
    ?>
    کانفیگ،امنیت بخشی و راه اندازی انواع سروها با هزینه مناسب | طراحی و برنامه نویسی تحت وب | جهت درخواست از اینجا اقدام نمایید.
    --==--==--==--
    !Linux Geek


  7. #5
    عضو انجمن rezaonline.net آواتار ها
    تاریخ عضویت
    Apr 2012
    محل سکونت
    Sanandaj | Tehran
    نوشته ها
    939
    تشکر تشکر کرده 
    1,556
    تشکر تشکر شده 
    2,338
    تشکر شده در
    1,230 پست

    پیش فرض پاسخ : صحت سنجی کد ملی در پی اچ پی

    چرا خودتو اذیت میکنی پسر خوب .
    فقط کافیه مقدار فیلد دیتابیس رو یونیک بذاری .
    تعداد کاراکتر ها رو چک کنی .
    از is_int استفاد کنی .

  8. #6
    عضو جدید
    تاریخ عضویت
    Oct 2010
    نوشته ها
    7
    تشکر تشکر کرده 
    0
    تشکر تشکر شده 
    0
    تشکر شده در
    0 پست

    پیش فرض پاسخ : صحت سنجی کد ملی در پی اچ پی

    با سلام
    من نیاز به کدی دارم که 3 رقم اول یک مجموعه عدد را بررسی کند و نمایش دهد
    مثلا من یک عددی مثل 91269003260039 دارم
    اگر 3 رقم اول 912 بود چاپ کند
    ورودی بهمن 91
    اگر 3 رقم اول 911 بود
    چاپ کند ورودی مهر 91
    ممنون می شوم کمکم کنید
    ویرایش توسط saeedjjjj : February 28th, 2014 در ساعت 11:05

  9. #7
    عضو انجمن sardarn آواتار ها
    تاریخ عضویت
    Aug 2010
    محل سکونت
    بوشهر
    نوشته ها
    956
    تشکر تشکر کرده 
    387
    تشکر تشکر شده 
    999
    تشکر شده در
    700 پست

    پیش فرض پاسخ : صحت سنجی کد ملی در پی اچ پی

    نقل قول نوشته اصلی توسط saeedjjjj نمایش پست ها
    با سلام
    من نیاز به کدی دارم که 3 رقم اول یک مجموعه عدد را بررسی کند و نمایش دهد
    مثلا من یک عددی مثل 91269003260039 دارم
    اگر 3 رقم اول 912 بود چاپ کند
    ورودی بهمن 91
    اگر 3 رقم اول 911 بود
    چاپ کند ورودی مهر 91
    ممنون می شوم کمکم کنید
    سلام
    این تاپیک قدیمی هست تاپیک جدید بزنید.جواب تون:
    تابع substr( )
    این تابع می­تواند زیررشته ای را از یک رشته جدا کند، این تابع به شکل زیر استفاده می­شود.Substr(متغیر رشته ای,شروع,طول)این تابع زیر رشته ای به طول مورد نظر را با شروع از نقطه­ی مشخص شده برمی­گرداند، اگر طول مشخص نشود از شروع تا انتهای رشته برگردانده می­شود.اندیس اولین کاراکتر0 می­باشد.

  10. #8
    عضو انجمن
    تاریخ عضویت
    May 2010
    نوشته ها
    175
    تشکر تشکر کرده 
    326
    تشکر تشکر شده 
    635
    تشکر شده در
    444 پست

    پیش فرض پاسخ : صحت سنجی کد ملی در پی اچ پی

    نقل قول نوشته اصلی توسط rezaonline.net نمایش پست ها
    چرا خودتو اذیت میکنی پسر خوب .
    فقط کافیه مقدار فیلد دیتابیس رو یونیک بذاری .
    تعداد کاراکتر ها رو چک کنی .
    از is_int استفاد کنی .
    اینطوری با کد ملی اشتباه و رندوم هم میشه ثبت نام کرد اونوقت . این ولیدیشن برای اینه که مطمئن بشیم یوزر کد ملی واقعی رو وارد کرده .

اطلاعات موضوع

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

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. پاسخ ها: 3
    آخرين نوشته: March 7th, 2015, 16:09
  2. پاسخ ها: 0
    آخرين نوشته: August 26th, 2013, 11:00
  3. پاسخ ها: 6
    آخرين نوشته: May 20th, 2013, 20:33
  4. پاسخ ها: 22
    آخرين نوشته: March 18th, 2013, 21:42
  5. پاسخ ها: 0
    آخرين نوشته: June 27th, 2012, 16:29

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •