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

موضوع: تابع چک کردن کارت اعتباری و بانکی

  1. #1
    عضو انجمن omid1991 آواتار ها
    تاریخ عضویت
    Jun 2013
    محل سکونت
    نمین
    نوشته ها
    217
    تشکر تشکر کرده 
    412
    تشکر تشکر شده 
    495
    تشکر شده در
    284 پست

    پیش فرض تابع چک کردن کارت اعتباری و بانکی

    سلام و عرض ادب خدمت بازدیدکنندگان محترم

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

    خب بریم سراغ بررسی ساختار کارت های اعتباری و بانکی

    شماره روی کارت های اعتباری یا کارت های بانکی شماره ای است 16 رقمی که از سمت چپ رقم اول بیانگر نوع یا کاربرد کارت (برای کارت های بانکی و اعتباری این رقم می تواند 4 یا 5 یا 6 باشد ) و 5 رقم بعدی بیانگر شماره شناسایی صادر کننده کارت و ارقام 7 تا 15 بیانگر شماره حساب یا شماره منحصر به فرد در مرکز صادرکننده کارت و رقم آخر آن هم یک رقم کنترل است که از روی 15 رقم سمت چپ بدست می آید. برای بررسی کنترل کد کافی است مجدد از روی 15 رقم سمت چپ صحت رقم کنترل را محاسبه کنیم

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

    منبع توضیحات ساختار کارت های اعتباری و بانکی : علی آرش
    منبع کد : کارگاه طراحی امیدتک

    کد PHP:
    function bankCardCheck($card=''$irCard=true)
    {
        
    $card = (string) preg_replace('/\D/','',$card);
        
    $strlen strlen($card);
        if(
    $irCard==true and $strlen!=16)
            return 
    false;
        if(
    $irCard!=true and ($strlen<13 or $strlen>19))
            return 
    false;
        if(!
    in_array($card[0],[2,4,5,6,9]))
            return 
    false;
        
        for(
    $i=0$i<$strlen$i++)
        {
            
    $res[$i] = $card[$i];
            if((
    $strlen%2)==($i%2))
            {
                
    $res[$i] *= 2;
                if(
    $res[$i]>9)
                    
    $res[$i] -= 9;        
            }
        }
        return 
    array_sum($res)%10==0?true:false;    
    }


    $card '1111222233334444';
    if(
    bankCardCheck($card))
        echo 
    'ok';
    else
        echo 
    'err'

    ویرایش توسط omid1991 : September 14th, 2018 در ساعت 23:55 دلیل: بروز رسانی تابع

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


  3. # ADS




     

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

    پیش فرض پاسخ : تابع چک کردن کارت اعتباری و بانکی

    آلگوریتم چک کردن کارت اعتباری ، همون آلگوریتم Luhn هست
    کد PHP:
    function luhn($number
        {
            
    $sum 0;
            
    $numDigits strlen($number);
            
    $parity $numDigits 2;
            for (
    $i 0$i $numDigits$i++) {
                
    $digit substr($number$i1);
                if (
    $parity == ($i 2)) 
                {
                    
    $digit <<= 1;
                    if (
    $digit
                    {
                        
    $digit $digit 9;
                    }
                }
                
    $sum += $digit;
            }
            return (
    == ($sum 10));
        } 

  5. تعداد تشکر ها ازrezaonline.net به دلیل پست مفید


  6. #3
    عضو انجمن omid1991 آواتار ها
    تاریخ عضویت
    Jun 2013
    محل سکونت
    نمین
    نوشته ها
    217
    تشکر تشکر کرده 
    412
    تشکر تشکر شده 
    495
    تشکر شده در
    284 پست

    پیش فرض پاسخ : تابع چک کردن کارت اعتباری و بانکی

    نقل قول نوشته اصلی توسط rezaonline.net نمایش پست ها
    آلگوریتم چک کردن کارت اعتباری ، همون آلگوریتم Luhn هست
    کد PHP:
    function luhn($number
        {
            
    $sum 0;
            
    $numDigits strlen($number);
            
    $parity $numDigits 2;
            for (
    $i 0$i $numDigits$i++) {
                
    $digit substr($number$i1);
                if (
    $parity == ($i 2)) 
                {
                    
    $digit <<= 1;
                    if (
    $digit
                    {
                        
    $digit $digit 9;
                    }
                }
                
    $sum += $digit;
            }
            return (
    == ($sum 10));
        } 
    جیگرتو بخرم کد من اصلا شبیه به این کد هست ؟!
    بعدشم این کد رو تست کن باگ داره کارت بانکی تقلبی هم قبول میکنه
    کدی که من نوشتم طبق توضیحات علی آرش و تقریبا بدون باگ هست

  7. #4
    عضو دائم T.Toosi آواتار ها
    تاریخ عضویت
    Jun 2015
    نوشته ها
    1,071
    تشکر تشکر کرده 
    278
    تشکر تشکر شده 
    2,936
    تشکر شده در
    1,329 پست

    پیش فرض پاسخ : تابع چک کردن کارت اعتباری و بانکی

    نقل قول نوشته اصلی توسط omid1991 نمایش پست ها
    جیگرتو بخرم کد من اصلا شبیه به این کد هست ؟!
    بعدشم این کد رو تست کن باگ داره کارت بانکی تقلبی هم قبول میکنه
    کدی که من نوشتم طبق توضیحات علی آرش و بدون باگ هست
    باسلام،

    هم در کد شما هم در کد rezaonline.net امکان تقلب وجود دارد به طور مثال در کد شما 6000000000000031 و در کد دیگر 6000000000000000038343434343434343434 درست برگشت میخورد به این دلیل که ساختن عدد در mod 10 کار دشواری نیست.

    کدی که قرار دادند همان ارقام موقعیت فرد را در 2 ضرب می کند اما تفاوتی که دارد شامل تمام کردیت کارت ها می شود، به طور مثال visa نوزده و سیزده رقمی هم دارد که باید ارقام موقعیت فرد بر تعداد ارقام % 2 بخش پذیر باشد تا در دو ضرب شود که در نتیجه کد شما جواب نمی دهد. اما کد شما برای کارت ها های داخلی کافی است که جای بهینه تر شدن هم دارد به طور مثال در حلقه اعداد لازم نیست هر بار شرط بررسی بزرگتر از 9 اجرا شود، شما فقط برای ارقام موقعیت فرد بررسی کنید که برای این کار نیاز است لاین بالاتر آن به شکل دیگر نوشته شود.

    همچنین فکر کنم بانک ملت رقم اول 9 و بانک توسعه صادرات رقم اول 2 هم دارند که باید تحقیق کنید و اگر همچین چیزی هست به پیش شماره ها اضافه کنید تا کد کامل شود.

  8. تعداد تشکر ها ازT.Toosi به دلیل پست مفید


  9. #5
    عضو انجمن omid1991 آواتار ها
    تاریخ عضویت
    Jun 2013
    محل سکونت
    نمین
    نوشته ها
    217
    تشکر تشکر کرده 
    412
    تشکر تشکر شده 
    495
    تشکر شده در
    284 پست

    پیش فرض پاسخ : تابع چک کردن کارت اعتباری و بانکی

    نقل قول نوشته اصلی توسط T.Toosi نمایش پست ها
    باسلام،

    هم در کد شما هم در کد rezaonline.net امکان تقلب وجود دارد به طور مثال در کد شما 6000000000000031 و در کد دیگر 6000000000000000038343434343434343434 درست برگشت میخورد به این دلیل که ساختن عدد در mod 10 کار دشواری نیست.

    کدی که قرار دادند همان ارقام موقعیت فرد را در 2 ضرب می کند اما تفاوتی که دارد شامل تمام کردیت کارت ها می شود، به طور مثال visa نوزده و سیزده رقمی هم دارد که باید ارقام موقعیت فرد بر تعداد ارقام % 2 بخش پذیر باشد تا در دو ضرب شود که در نتیجه کد شما جواب نمی دهد. اما کد شما برای کارت ها های داخلی کافی است که جای بهینه تر شدن هم دارد به طور مثال در حلقه اعداد لازم نیست هر بار شرط بررسی بزرگتر از 9 اجرا شود، شما فقط برای ارقام موقعیت فرد بررسی کنید که برای این کار نیاز است لاین بالاتر آن به شکل دیگر نوشته شود.

    همچنین فکر کنم بانک ملت رقم اول 9 و بانک توسعه صادرات رقم اول 2 هم دارند که باید تحقیق کنید و اگر همچین چیزی هست به پیش شماره ها اضافه کنید تا کد کامل شود.
    با سلام و تشکر بابت راهنماییتون

    بزودی اصلاح میشه

  10. #6
    عضو انجمن omid1991 آواتار ها
    تاریخ عضویت
    Jun 2013
    محل سکونت
    نمین
    نوشته ها
    217
    تشکر تشکر کرده 
    412
    تشکر تشکر شده 
    495
    تشکر شده در
    284 پست

    پیش فرض پاسخ : تابع چک کردن کارت اعتباری و بانکی

    نقل قول نوشته اصلی توسط T.Toosi نمایش پست ها
    باسلام،

    هم در کد شما هم در کد rezaonline.net امکان تقلب وجود دارد به طور مثال در کد شما 6000000000000031 و در کد دیگر 6000000000000000038343434343434343434 درست برگشت میخورد به این دلیل که ساختن عدد در mod 10 کار دشواری نیست.

    کدی که قرار دادند همان ارقام موقعیت فرد را در 2 ضرب می کند اما تفاوتی که دارد شامل تمام کردیت کارت ها می شود، به طور مثال visa نوزده و سیزده رقمی هم دارد که باید ارقام موقعیت فرد بر تعداد ارقام % 2 بخش پذیر باشد تا در دو ضرب شود که در نتیجه کد شما جواب نمی دهد. اما کد شما برای کارت ها های داخلی کافی است که جای بهینه تر شدن هم دارد به طور مثال در حلقه اعداد لازم نیست هر بار شرط بررسی بزرگتر از 9 اجرا شود، شما فقط برای ارقام موقعیت فرد بررسی کنید که برای این کار نیاز است لاین بالاتر آن به شکل دیگر نوشته شود.

    همچنین فکر کنم بانک ملت رقم اول 9 و بانک توسعه صادرات رقم اول 2 هم دارند که باید تحقیق کنید و اگر همچین چیزی هست به پیش شماره ها اضافه کنید تا کد کامل شود.
    عزیز من تحقیق کردم بانک ملت تو بعضی از شهرها با شماره 991975 شروع میشه و بانک توسعه صادرات با شماره 207177 شروع میشه

    الگورتیم رو تغییر دادم علاوه بر کارت های ایرانی کارت های بانکی بین المللی هم میشه چک کرد

    درمورد دور زدن ، برنامه نویسا و هکر ها بله براشون کاری نداره

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


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

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

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

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

  1. پاسخ ها: 3
    آخرين نوشته: December 2nd, 2014, 12:29
  2. پاسخ ها: 2
    آخرين نوشته: April 1st, 2014, 01:02
  3. 100mb هاست روی سرور معتبر (وارز نباشه!) و سایت های معتبری روش باشند!
    توسط :..:galiver:..: در انجمن درخواست هاست اشتراکی
    پاسخ ها: 7
    آخرين نوشته: March 13th, 2012, 19:37

کلمات کلیدی این موضوع

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

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