سلام و عرض ادب خدمت بازدیدکنندگان محترم
شاید بسیار برایتان پیش آمده باشد که در پروژه ای لازم هست که شماره کارت بانکی کاربر را دریافت کنید
و شاید تا الان تنها اعتبارسنجی که انجام میدادید چک کردن 16رقمی بودن و فقط عدد بودن کارت بانکی بوده
بنا به دلایلی لازم شد که واقعا صحت کارت بانکی کاربر را بوسیله الگوریتمی تشخیص دهیم
خب بریم سراغ بررسی ساختار کارت های اعتباری و بانکی
شماره روی کارت های اعتباری یا کارت های بانکی شماره ای است 16 رقمی که از سمت چپ رقم اول بیانگر نوع یا کاربرد کارت (برای کارت های بانکی و اعتباری این رقم می تواند 4 یا 5 یا 6 باشد ) و 5 رقم بعدی بیانگر شماره شناسایی صادر کننده کارت و ارقام 7 تا 15 بیانگر شماره حساب یا شماره منحصر به فرد در مرکز صادرکننده کارت و رقم آخر آن هم یک رقم کنترل است که از روی 15 رقم سمت چپ بدست می آید. برای بررسی کنترل کد کافی است مجدد از روی 15 رقم سمت چپ صحت رقم کنترل را محاسبه کنیم
برای محاسبه رقم کنترل از روی سایر ارقام ، از سمت چپ و با شروع از موقعیت 1 تا موقعیت 16 ، ارقام موقعیت فرد را در 2 و ارقام موقعیت زوج را در یک ضرب می کنیم، اگر حاصل ضرب هر مرحله بیشتر از 9 شد 9 واحد از آن کم کنید تا یک رقمی شود و سپس اعداد حاصل را با هم جمع می کنیم.
اگر عدد حاصل از اجرای مرحله یک بر 10 بخش پذیر باشد ، شماره کارت صحیح قلمداد می شود در غیر اینصورت شماره کارت صحیح نمی باشد
منبع توضیحات ساختار کارت های اعتباری و بانکی :
علی آرش
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';
ادامه مطلب
ثبت دیدگاه
پر کردن فيلدهاي * دار الزامي است.