Помогите с регуляркой для проверки номера банковской карты

Тема в разделе "Регулярные выражения", создана пользователем Extalionez, 1 окт 2012.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    Доброго времени суток! Собственно сабж. Правда необходимо с учётом этого.
     
  2. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
    По сабжу
    Код:
    /(^[3|4|5|6])([0-9]{15}+)/
    Но банковские карты проверяются по алгоритму Луна, а не этим способом.
     
    latteo нравится это.
  3. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    Да потом код лучше проверить по алгоритму Луна:

    PHP:
    function is_valid_credit_card($s) {
        
    // оставить только цифры
        
    $s strrev(preg_replace('/[^\d]/','',$s));
     
        
    // вычисление контрольной суммы
        
    $sum 0;
        for (
    $i 0$j strlen($s); $i $j$i++) {
            
    // использовать четные цифры как есть
            
    if (($i 2) == 0) {
                
    $val $s[$i];
            } else {
                
    // удвоить нечетные цифры и вычесть 9, если они больше 9
                
    $val $s[$i] * 2;
                if (
    $val 9)  $val -= 9;
            }
            
    $sum += $val;
        }
     
        
    // число корректно, если сумма равна 10
        
    return (($sum 10) == 0);
    }
     
    if (! 
    is_valid_credit_card('4111 1111 1111 1234')) {
        echo 
    'ошибка в номере';
    }
     
    Extalionez, latteo и crazyzubr нравится это.
Статус темы:
Закрыта.