Entender los números BIN: guía para desarrolladores
¿Qué es un número BIN/IIN?
Los números de identificación bancaria (BIN) o números de identificación del emisor (IIN) son los primeros 6-8 dígitos de un número de tarjeta de pago que identifican a la institución emisora de la tarjeta. Estos números son fundamentales para el procesamiento de pagos, la detección de fraude y el enrutamiento de transacciones.
Estructura del número BIN
Desglose del formato estándar
| Posición | Longitud | Propósito | Ejemplo |
|---|---|---|---|
| 1 | 1 dígito | Identificador principal de industria (MII) | 4 (Banca) |
| 2-6 | 5 dígitos | Institución emisora | 12345 |
| 7-8 | 2 dígitos | BIN extendido (opcional) | 67 |
Valores del identificador principal de industria (MII)
| Dígito MII | Industria |
|---|---|
| 0 | Asignación ISO/TC 68 |
| 1 | Aerolíneas |
| 2 | Aerolíneas/Financiero |
| 3 | Viajes/Entretenimiento |
| 4 | Banca/Financiero |
| 5 | Banca/Financiero |
| 6 | Comercio minorista |
| 7 | Petróleo/Otros |
| 8 | Salud/Telecomunicaciones |
| 9 | Asignación nacional |
Rangos de BIN más comunes por red de tarjeta
Rangos de BIN principales
bin_ranges = {
'Visa': ['4'],
'Mastercard': ['51-55', '2221-2720'],
'American Express': ['34', '37'],
'Discover': ['6011', '644-649', '65'],
'JCB': ['3528-3589'],
'UnionPay': ['62']
}
Implementación de una consulta de BIN
def validate_bin(card_number):
bin_number = card_number[:6]
# Validación básica
if not bin_number.isdigit():
return False
# Identificación de la red
if card_number.startswith('4'):
network = 'Visa'
elif any(card_number.startswith(str(i)) for i in range(51, 56)):
network = 'Mastercard'
elif card_number.startswith(('34', '37')):
network = 'American Express'
else:
network = 'Unknown'
return {
'bin': bin_number,
'network': network,
'length': len(card_number),
'valid': len(card_number) in [13, 15, 16, 19]
}
Propiedades de los datos de un BIN
Campos estándar de respuesta de un BIN
| Campo | Descripción | Ejemplo |
|---|---|---|
| scheme | Red de la tarjeta | "visa" |
| country | País emisor | "US" |
| type | Tipo de tarjeta | "credit" |
| category | Categoría de la tarjeta | "platinum" |
| issuer | Banco emisor | "CHASE" |
| length | Longitud del número de tarjeta | 16 |
Reglas de validación basadas en el BIN
Longitud del número de tarjeta por red
| Red | Longitudes válidas |
|---|---|
| Visa | 13, 16, 19 |
| Mastercard | 16 |
| American Express | 15 |
| Discover | 16, 19 |
| UnionPay | 16-19 |
Ejemplo de integración
const binValidator = {
checkBIN: function(cardNumber) {
const bin = cardNumber.substring(0, 6);
const length = cardNumber.length;
// Verificación básica del formato
if (!/^\d{6}/.test(bin)) {
return {
valid: false,
error: 'Invalid BIN format'
};
}
// Detección de la red
const network = this.detectNetwork(bin);
// Validación de la longitud
const isValidLength = this.validateLength(length, network);
return {
valid: isValidLength,
network: network,
bin: bin,
cardLength: length
};
},
detectNetwork: function(bin) {
// Lógica de detección de la red
if (/^4/.test(bin)) return 'visa';
if (/^5[1-5]/.test(bin)) return 'mastercard';
if (/^3[47]/.test(bin)) return 'amex';
return 'unknown';
}
};
Consideraciones de seguridad
-
Protección de datos
- Nunca guardes números de tarjeta completos
- Cifra los datos de BIN en tránsito
- Limita el acceso a los datos de BIN
-
Requisitos de cumplimiento
- Cumplimiento de PCI DSS para el almacenamiento de BIN
- Políticas de retención de datos
- Implementación de control de acceso
-
Optimización del rendimiento
- Almacena en caché los resultados de las consultas de BIN
- Implementa límites de tasa (rate limiting)
- Usa consultas de BIN en lote
Buenas prácticas para procesar BIN
| Práctica | Propósito | Implementación |
|---|---|---|
| Caché | Reducir llamadas a la API | Guardar los datos de BIN en memoria |
| Validación | Evitar errores | Verificar el formato antes de procesar |
| Monitoreo | Detectar problemas | Registrar patrones de consulta de BIN |
Esta guía ofrece la información esencial para trabajar con números BIN en sistemas de procesamiento de pagos. Úsala para mejorar la validación de pagos, la detección de fraude y el enrutamiento de transacciones en tus aplicaciones.