Con unas pocas expresiones regulares simples, puede verificar fácilmente si su cliente ingresó un número de tarjeta de crédito válido en su formulario de pedido. Incluso puede determinar el tipo de tarjeta de crédito que se utiliza. Cada emisor de tarjeta tiene su propio rango de números de tarjeta, identificados por los primeros 4 dígitos.
Puede usar una expresión regular ligeramente diferente para encontrar números de tarjetas de crédito, o secuencias de números que podrían ser números de tarjetas de crédito, dentro de documentos más grandes. Esto puede ser muy útil para demostrar en una auditoría de seguridad que no está exponiendo incorrectamente los detalles financieros de sus clientes.
Comenzaremos con el formulario de pedido.
Eliminar espacios y guiones
El primer paso es eliminar todos los que no sean dígitos del número de tarjeta introducido por el cliente. Las tarjetas de crédito físicas tienen espacios dentro del número de tarjeta para agrupar los dígitos, lo que facilita a los humanos la lectura o la escritura. Por lo tanto, su formulario de pedido debe aceptar números de tarjeta con espacios o guiones en ellos.
Para eliminar todos los números que no sean dígitos del número de tarjeta, simplemente use la función «reemplazar todo» en su lenguaje de scripts para buscar la expresión regular + y reemplazarla con nada. Si solo desea reemplazar espacios y guiones, puede usar +. Si esta expresión regular parece extraña, recuerde que en una clase de caracteres, el guion es literal cuando se produce justo antes del corchete de cierre (o justo después del corchete de apertura o del signo de negación).
Si te estás preguntando para qué sirve el plus: eso es para el rendimiento. Si la entrada tiene dígitos no consecutivos, como 1===2, entonces + coincide con los tres signos iguales a la vez y los elimina en un reemplazo. Sin el plus, se requerirían tres reemplazos. En este caso, el ahorro es de solo unos pocos microsegundos. Pero es un buen hábito mantener la eficiencia de expresiones regulares en el fondo de su mente. Aunque los ahorros son mínimos aquí, también lo es el esfuerzo de escribir el plus extra.
Validar números de tarjetas de Crédito en Su Formulario de Pedido
Validar números de tarjetas de crédito es el trabajo ideal para expresiones regulares. Son solo una secuencia de 13 a 16 dígitos, con unos pocos dígitos específicos al principio que identifican al emisor de la tarjeta. Puede usar las expresiones regulares específicas a continuación para alertar a los clientes cuando intentan usar un tipo de tarjeta que no acepta, o para enrutar pedidos con diferentes tarjetas a diferentes procesadores. Todas estas expresiones regulares fueron tomadas de la biblioteca de RegexBuddy.
- Visado: ^4{12}(?:{3})? All Todos los números de tarjeta Visa comienzan con un 4. Las tarjetas nuevas tienen 16 dígitos. Las tarjetas antiguas tienen 13.
- MasterCard: ^(?:5{2}|222|22|2{2}|27|2720){12}$ Los números de MasterCard comienzan con los números del 51 al 55 o con los números del 2221 al 2720. Todos tienen 16 dígitos.
- American Express: ^3{13} numbers Los números de la tarjeta American Express comienzan con 34 o 37 y tienen 15 dígitos.
- Diners Club: ^3 (?: 0/) {11} numbers Los números de tarjetas Diners Club comienzan con 300 a 305, 36 o 38. Todos tienen 14 dígitos. Hay tarjetas Diners Club que comienzan con 5 y tienen 16 dígitos. Se trata de una empresa conjunta entre Diners Club y MasterCard, y debe procesarse como una MasterCard.
- Descubre: ^6 (?:011/5{2}){12}$ Los números de tarjeta Discover comienzan por 6011 o 65. Todos tienen 16 dígitos.
- JCB: ^(?: 2131/1800/35\d{3})\d{11} cards Las tarjetas JCB que comienzan con 2131 o 1800 tienen 15 dígitos. Las tarjetas JCB que comienzan con 35 tienen 16 dígitos.
Si solo desea verificar si el número de tarjeta parece válido, sin determinar la marca, puede combinar las seis expresiones regulares anteriores mediante alternancia. Un grupo que no captura pone los anclajes fuera de la alternancia. El espacio libre permite que los comentarios y las expresiones regulares se ajusten al ancho de esta página.
^(?:4{12}(?:{3})? # Visa
| (?: 5 {2} # MasterCard
| 222/22/2{2}|27|2720){12}
| 3{13} # American Express
| 3(?:0/) {11} # Diners Club
| 6 (?:011/5{2}){12} # Descubrir
/|?:2131/1800/35\d{3})\d{11} # JCB
)$
Estas expresiones regulares capturarán fácilmente los números que no son válidos porque el cliente ingresó demasiados o muy pocos dígitos. No atraparán números con dígitos incorrectos. Para ello, es necesario seguir el algoritmo de Luhn, que no se puede hacer con una expresión regular. Y, por supuesto, incluso si el número es matemáticamente válido, eso no significa que se haya emitido una tarjeta con este número o que haya dinero en la cuenta. El beneficio o la expresión regular es que puede ponerlo en un poco de JavaScript para verificar instantáneamente si hay errores obvios, en lugar de hacer que el cliente espere 30 segundos a que el procesador de su tarjeta de crédito falle en el pedido. Y si el procesador de su tarjeta cobra por transacciones fallidas, realmente querrá implementar la validación regex y Luhn.
Búsqueda de números de tarjeta de crédito en Documentos
Con dos modificaciones simples, puede usar cualquiera de las expresiones regulares anteriores para encontrar números de tarjeta en documentos más grandes. Simplemente reemplace el recuadro y el dólar con un límite de palabra como en \b4{12} (?:{3})?\b.
Si está planeando buscar en un servidor de documentos grande, una expresión regular más simple acelerará la búsqueda. A menos que tu empresa use números de 16 dígitos para otros fines, tendrás pocos falsos positivos. La expresión regular \b \ d{13,16}\b encontrará cualquier secuencia de 13 a 16 dígitos.
Al buscar un disco duro lleno de archivos, no puede eliminar espacios y guiones primero como puede al validar un solo número de tarjeta. Para encontrar números de tarjeta con espacios o guiones, utilice \b (?: \d*?) {13,16}\b. Esta expresión regular permite cualquier cantidad de espacios y guiones en cualquier parte del número. Esta es la única manera. Visa y MasterCard colocan dígitos en juegos de 4, mientras que Amex y Discover usan grupos de 4, 5 y 6 dígitos. Las personas que ingresan los números pueden tener ideas diferentes todavía.
Haz una donación
¿Este sitio web te acaba de ahorrar un viaje a la librería? Por favor, haga una donación para apoyar este sitio, y obtendrá una vida de acceso sin publicidad a este sitio!