Comprendre les numéros BIN : guide pour les développeurs
Qu'est-ce qu'un numéro BIN/IIN ?
Les numéros d'identification bancaire (BIN) ou numéros d'identification de l'émetteur (IIN) sont les 6 à 8 premiers chiffres d'un numéro de carte de paiement qui identifient l'établissement émetteur de la carte. Ces numéros sont essentiels au traitement des paiements, à la détection de la fraude et au routage des transactions.
Structure d'un numéro BIN
Décomposition du format standard
| Position | Longueur | Rôle | Exemple |
|---|---|---|---|
| 1 | 1 chiffre | Major Industry Identifier (MII) | 4 (banque) |
| 2-6 | 5 chiffres | Établissement émetteur | 12345 |
| 7-8 | 2 chiffres | BIN étendu (facultatif) | 67 |
Valeurs du Major Industry Identifier (MII)
| Chiffre MII | Secteur |
|---|---|
| 0 | Attribution ISO/TC 68 |
| 1 | Compagnies aériennes |
| 2 | Compagnies aériennes/Finance |
| 3 | Voyage/Divertissement |
| 4 | Banque/Finance |
| 5 | Banque/Finance |
| 6 | Commerce de détail |
| 7 | Pétrole/Autre |
| 8 | Santé/Télécommunications |
| 9 | Attribution nationale |
Plages de BIN courantes par réseau de carte
Plages 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']
}
Implémentation d'une recherche de BIN
def validate_bin(card_number):
bin_number = card_number[:6]
# Validation de base
if not bin_number.isdigit():
return False
# Identification du réseau
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]
}
Propriétés des données BIN
Champs de réponse BIN standard
| Champ | Description | Exemple |
|---|---|---|
| scheme | Réseau de la carte | "visa" |
| country | Pays émetteur | "US" |
| type | Type de carte | "credit" |
| category | Catégorie de carte | "platinum" |
| issuer | Banque émettrice | "CHASE" |
| length | Longueur du numéro de carte | 16 |
Règles de validation basées sur le BIN
Longueur du numéro de carte par réseau
| Réseau | Longueurs valides |
|---|---|
| Visa | 13, 16, 19 |
| Mastercard | 16 |
| American Express | 15 |
| Discover | 16, 19 |
| UnionPay | 16-19 |
Exemple d'intégration
const binValidator = {
checkBIN: function(cardNumber) {
const bin = cardNumber.substring(0, 6);
const length = cardNumber.length;
// Vérification simple du format
if (!/^\d{6}/.test(bin)) {
return {
valid: false,
error: 'Invalid BIN format'
};
}
// Détection du réseau
const network = this.detectNetwork(bin);
// Validation de la longueur
const isValidLength = this.validateLength(length, network);
return {
valid: isValidLength,
network: network,
bin: bin,
cardLength: length
};
},
detectNetwork: function(bin) {
// Logique de détection du réseau
if (/^4/.test(bin)) return 'visa';
if (/^5[1-5]/.test(bin)) return 'mastercard';
if (/^3[47]/.test(bin)) return 'amex';
return 'unknown';
}
};
Considérations de sécurité
-
Protection des données
- Ne stockez jamais les numéros de carte complets
- Chiffrez les données BIN en transit
- Limitez l'accès aux données BIN
-
Exigences de conformité
- Conformité PCI DSS pour le stockage des BIN
- Politiques de conservation des données
- Mise en œuvre du contrôle d'accès
-
Optimisation des performances
- Mettez en cache les résultats des recherches de BIN
- Implémentez une limitation de débit (rate limiting)
- Utilisez des recherches de BIN en lot
Bonnes pratiques pour le traitement des BIN
| Pratique | Objectif | Mise en œuvre |
|---|---|---|
| Mise en cache | Réduire les appels API | Stocker les données BIN en mémoire |
| Validation | Éviter les erreurs | Vérifier le format avant traitement |
| Surveillance | Détecter les problèmes | Journaliser les schémas de recherche de BIN |
Ce guide fournit l'essentiel pour travailler avec les numéros BIN dans les systèmes de traitement des paiements. Utilisez-le pour améliorer la validation des paiements, la détection de la fraude et le routage des transactions dans vos applications.