Skip to content

Instantly share code, notes, and snippets.

@claudiosanches
Last active April 8, 2025 20:36
Show Gist options
  • Save claudiosanches/26d9668f21dbdc787472 to your computer and use it in GitHub Desktop.
Save claudiosanches/26d9668f21dbdc787472 to your computer and use it in GitHub Desktop.
Regex for test credit card brand
<?php
// Test cards
$cards = array(
'378282246310005', // American Express
'371449635398431', // American Express
'5078601870000127985', // Aura
'5078601800003247449', // Aura
'30569309025904', // Diners Club
'38520000023237', // Diners Club
'6011111111111117', // Discover
'6362970000457013', // Elo
'6062825624254001', // Hipercard
'5555555555554444', // MasterCard
'5105105105105100', // MasterCard
'6759649826438453', // Maestro
'6799990100000000019', // Maestro
'4111111111111111', // Visa
'4012888888881881', // Visa
);
// Brands regex
$brands = array(
'visa' => '/^4\d{12}(\d{3})?$/',
'mastercard' => '/^(5[1-5]\d{4}|677189)\d{10}$/',
'diners' => '/^3(0[0-5]|[68]\d)\d{11}$/',
'discover' => '/^6(?:011|5[0-9]{2})[0-9]{12}$/',
'elo' => '/^((((636368)|(438935)|(504175)|(451416)|(636297))\d{0,10})|((5067)|(4576)|(4011))\d{0,12})$/',
'amex' => '/^3[47]\d{13}$/',
'jcb' => '/^(?:2131|1800|35\d{3})\d{11}$/',
'aura' => '/^(5078\d{2})(\d{2})(\d{11})$/',
'hipercard' => '/^(606282\d{10}(\d{3})?)|(3841\d{15})$/',
'maestro' => '/^(?:5[0678]\d\d|6304|6390|67\d\d)\d{8,15}$/',
);
// Run test
foreach ( $cards as $number ) {
$brand = 'undefined';
foreach ( $brands as $_brand => $regex ) {
if ( preg_match( $regex, $number ) ) {
$brand = $_brand;
break;
}
}
echo '<pre>' . print_r( array( $number, $brand ), true ) . '</pre>';
}
@thadeucity
Copy link

Fiz um nova versão que me atendeu para todos os cenários da imagem considerando cartões de 16 dígitos:

image

^(?:40117[8-9]|431274|438935|451416|457393|45763[1-2]|504175|506699|5067(?:[0-6][0-9]|7[0-8])|509[0-9][0-9][0-9]|627780|636297|636368|6500(?:3[1-3]|3[5-9]|4[0-9]|5[0-1])|650(?:4(?:0[5-9]|[1-9][0-9])|5(?:[0-2][0-9]|3[0-8]|4[1-9]|[5-8][0-9]|9[0-8]))|6507(?:0[0-9]|1[0-8]|2[0-7])|6509(?:0[1-9]|1[0-9]|20)|6516(?:5[2-9]|[6-7][0-9])|6550(?:[0-1][0-9]|2[1-9]|[3-4][0-9]|5[0-8])|65165[2-4]|65048[5-8]|650489|65049[0-4])\d{10}$

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment