public static function cardNumber(Validator $validator, $data, $pattern, $rule)
    {
        foreach (Validator::getValues($data, $pattern) as $attribute => $value) {
            if (null === $value || empty($value)) {
                continue;
            }

            // Strip any non-digits (useful for credit card numbers with spaces and hyphens)
            $number = preg_replace('/\D/', '', $value);

            // Set the string length and parity
            $numberLength = strlen($number);
            $parity       = $numberLength % 2;

            // Loop through each digit and do the maths
            $total = 0;
            for ($i = 0; $i < $numberLength; $i++) {
                $digit = $number[$i];
                // Multiply alternate digits by two
                if ($i % 2 == $parity) {
                    $digit *= 2;
                    // If the sum is two digits, add them together (in effect)
                    if ($digit > 9) {
                        $digit -= 9;
                    }
                }
                // Total up the digits
                $total += $digit;
            }

            // If the total mod 10 equals 0, the number is valid
            if ($total % 10 == 0) {
                continue;
            }

            $validator->addError($attribute, $rule);
        }
    }
public static function cardNumber(Validator $validator, $data, $pattern, $rule)
    {
        foreach (Validator::getValues($data, $pattern) as $attribute => $value) {
            if (null === $value || empty($value)) {
                continue;
            }

            // Strip any non-digits (useful for credit card numbers with spaces and hyphens)
            $number = preg_replace('/\D/', '', $value);

            // Set the string length and parity
            $numberLength = strlen($number);
            $parity       = $numberLength % 2;

            // Loop through each digit and do the maths
            $total = 0;
            for ($i = 0; $i < $numberLength; $i++) {
                $digit = $number[$i];
                // Multiply alternate digits by two
                if ($i % 2 == $parity) {
                    $digit *= 2;
                    // If the sum is two digits, add them together (in effect)
                    if ($digit > 9) {
                        $digit -= 9;
                    }
                }
                // Total up the digits
                $total += $digit;
            }

            // If the total mod 10 equals 0, the number is valid
            if ($total % 10 == 0) {
                continue;
            }

            $validator->addError($attribute, $rule);
        }
    }
public static function cardNumber ( Validator $ validator , $ data , $ pattern , $ rule ) { foreach ( Validator :: getValues ( $ data , $ pattern ) as $ attribute => $ value ) { if ( null === $ value || empty ( $ value ) ) { continue ; } // Strip any non-digits (useful for credit card numbers with spaces and hyphens) $ number = preg_replace ( '/\D/' , '' , $ value ) ; // Set the string length and parity $ numberLength = strlen ( $ number ) ; $ parity = $ numberLength % 2 ; // Loop through each digit and do the maths $ total = 0 ; for ( $ i = 0 ; $ i < $ numberLength ; $ i ++ ) { $ digit = $ number [ $ i ] ; // Multiply alternate digits by two if ( $ i % 2 == $ parity ) { $ digit *= 2 ; // If the sum is two digits, add them together (in effect) if ( $ digit > 9 ) { $ digit -= 9 ; } } // Total up the digits $ total += $ digit ; } // If the total mod 10 equals 0, the number is valid if ( $ total % 10 == 0 ) { continue ; } $ validator -> addError ( $ attribute , $ rule ) ; } }
card-number

@see http://stackoverflow.com/questions/174730/what-is-the-best-way-to-validate-a-credit-card-in-php

@param \MadeSimple\Validator\Validator $validator
@param array $data
@param string $pattern
@param string $rule
card - number