public static function check($luhn, $length, $unDecorate = true, $hyphens = [])
{
$luhn = $unDecorate ? self::unDecorate($luhn, $hyphens) : $luhn;
if (strlen($luhn) != $length) {
return false;
}
$expr = sprintf('/\\d{%d}/i', $length);
if (!preg_match($expr, $luhn)) {
return false;
}
$check = 0;
for ($i = 0; $i < $length; $i += 2) {
if ($length % 2 == 0) {
$check += 3 * (int) substr($luhn, $i, 1);
$check += (int) substr($luhn, $i + 1, 1);
} else {
$check += (int) substr($luhn, $i, 1);
$check += 3 * (int) substr($luhn, $i + 1, 1);
}
}
return $check % 10 == 0;
}