Entendendo os números BIN: guia para desenvolvedores
O que é um número BIN/IIN?
Os números de identificação bancária (BIN) ou números de identificação do emissor (IIN) são os primeiros 6-8 dígitos do número de um cartão de pagamento que identificam a instituição emissora do cartão. Esses números são essenciais para o processamento de pagamentos, a detecção de fraudes e o roteamento de transações.
Estrutura do número BIN
Detalhamento do formato padrão
| Posição | Tamanho | Propósito | Exemplo |
|---|---|---|---|
| 1 | 1 dígito | Identificador Principal da Indústria (MII) | 4 (Bancos) |
| 2-6 | 5 dígitos | Instituição emissora | 12345 |
| 7-8 | 2 dígitos | BIN estendido (opcional) | 67 |
Valores do Identificador Principal da Indústria (MII)
| Dígito MII | Indústria |
|---|---|
| 0 | Atribuição ISO/TC 68 |
| 1 | Companhias aéreas |
| 2 | Companhias aéreas/Financeiro |
| 3 | Viagens/Entretenimento |
| 4 | Bancos/Financeiro |
| 5 | Bancos/Financeiro |
| 6 | Varejo |
| 7 | Petróleo/Outros |
| 8 | Saúde/Telecomunicações |
| 9 | Atribuição nacional |
Faixas de BIN comuns por bandeira
Faixas de BIN principais
bin_ranges = {
'Visa': ['4'],
'Mastercard': ['51-55', '2221-2720'],
'American Express': ['34', '37'],
'Discover': ['6011', '644-649', '65'],
'JCB': ['3528-3589'],
'UnionPay': ['62']
}
Implementação de consulta de BIN
def validate_bin(card_number):
bin_number = card_number[:6]
# Validação básica
if not bin_number.isdigit():
return False
# Identificação da bandeira
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]
}
Propriedades dos dados de BIN
Campos padrão de resposta de BIN
| Campo | Descrição | Exemplo |
|---|---|---|
| scheme | Bandeira | "visa" |
| country | País emissor | "US" |
| type | Tipo de cartão | "credit" |
| category | Categoria do cartão | "platinum" |
| issuer | Banco emissor | "CHASE" |
| length | Tamanho do número do cartão | 16 |
Regras de validação baseadas em BIN
Tamanho do número do cartão por bandeira
| Bandeira | Tamanhos válidos |
|---|---|
| Visa | 13, 16, 19 |
| Mastercard | 16 |
| American Express | 15 |
| Discover | 16, 19 |
| UnionPay | 16-19 |
Exemplo de integração
const binValidator = {
checkBIN: function(cardNumber) {
const bin = cardNumber.substring(0, 6);
const length = cardNumber.length;
// Verificação básica do formato
if (!/^\d{6}/.test(bin)) {
return {
valid: false,
error: 'Invalid BIN format'
};
}
// Detecção da bandeira
const network = this.detectNetwork(bin);
// Validação do tamanho
const isValidLength = this.validateLength(length, network);
return {
valid: isValidLength,
network: network,
bin: bin,
cardLength: length
};
},
detectNetwork: function(bin) {
// Lógica de detecção da bandeira
if (/^4/.test(bin)) return 'visa';
if (/^5[1-5]/.test(bin)) return 'mastercard';
if (/^3[47]/.test(bin)) return 'amex';
return 'unknown';
}
};
Considerações de segurança
-
Proteção de dados
- Nunca armazene números de cartão completos
- Criptografe os dados de BIN em trânsito
- Limite o acesso aos dados de BIN
-
Requisitos de conformidade
- Conformidade com PCI DSS para armazenamento de BIN
- Políticas de retenção de dados
- Implementação de controle de acesso
-
Otimização de desempenho
- Faça cache dos resultados de consulta de BIN
- Implemente limite de taxa (rate limiting)
- Use consultas de BIN em lote
Boas práticas para processar BIN
| Prática | Propósito | Implementação |
|---|---|---|
| Cache | Reduzir chamadas à API | Armazenar os dados de BIN em memória |
| Validação | Evitar erros | Verificar o formato antes de processar |
| Monitoramento | Detectar problemas | Registrar padrões de consulta de BIN |
Este guia reúne as informações essenciais para trabalhar com números BIN em sistemas de processamento de pagamentos. Use-o para melhorar a validação de pagamentos, a detecção de fraudes e o roteamento de transações nas suas aplicações.