Analizzatore di Bande Magnetiche Carte di Credito

Analizzatore di Bande Magnetiche Carte di Credito

Analizzatore di Bande Magnetiche Carte di Credito è una libreria Python e uno strumento da riga di comando per l’analisi e l’elaborazione dei dati delle bande magnetiche delle carte di credito. Supporta i formati Traccia 1 e Traccia 2 come specificato negli standard ISO/IEC 7811-2 e ISO/IEC 7813.

Nota Questo strumento è destinato esclusivamente a scopi didattici e di test. Gestisci sempre i dati delle carte di pagamento in conformità con i requisiti PCI DSS e le leggi e i regolamenti applicabili.

Guida all’Utilizzo

Questa guida fornisce esempi su come utilizzare la libreria di analisi delle bande magnetiche delle carte di credito.

Utilizzo di Base

Analisi Completa dei Dati della Banda

from credit_card_stripe_parser import FullTrackParser

# Crea un'istanza del parser
parser = FullTrackParser()

# Dati di esempio della traccia
track_data = "%B5168755544412233^PKMMV/UNEMBOXXXX          ^1807111100000000000000111000000?;5168755544412233=18071111000011100000?"

# Analizza i dati della traccia
result = parser.parse(track_data)

# Accedi ai dati analizzati
if result.is_track_one_valid and result.track_one:
    print(f"Intestatario: {result.track_one.card_holder_name.strip()}")
    print(f"PAN: {result.track_one.pan}")
    print(f"Scadenza: {result.track_one.expiration_date[:2]}/{result.track_one.expiration_date[2:]}")

if result.is_track_two_valid and result.track_two:
    print(f"Codice di Servizio: {result.track_two.service_code}")

Analisi delle Tracce Singole

Analisi Traccia 1

from credit_card_stripe_parser import FullTrackParser

parser = FullTrackParser()
track1_data = "%B5168755544412233^PKMMV/UNEMBOXXXX          ^1807111100000000000000111000000?"

try:
    track1 = parser.parse_track_one(track1_data)
    print(f"Dati Traccia 1: {track1}")
except Exception as e:
    print(f"Errore nell'analisi della Traccia 1: {e}")

Analisi Traccia 2

from credit_card_stripe_parser import FullTrackParser

parser = FullTrackParser()
track2_data = ";5168755544412233=18071111000011100000?"

try:
    track2 = parser.parse_track_two(track2_data)
    print(f"Dati Traccia 2: {track2}")
except Exception as e:
    print(f"Errore nell'analisi della Traccia 2: {e}")

Gestione degli Errori

La libreria fornisce eccezioni specifiche per diversi scenari di errore:

from credit_card_stripe_parser import (
    FullTrackParser,
    InvalidTrackOneException,
    InvalidTrackTwoException,
    InvalidTrackDataException
)

parser = FullTrackParser()

try:
    result = parser.parse(invalid_track_data)
except InvalidTrackOneException as e:
    print(f"Dati Traccia 1 non validi: {e}")
except InvalidTrackTwoException as e:
    print(f"Dati Traccia 2 non validi: {e}")
except InvalidTrackDataException as e:
    print(f"Dati traccia non validi: {e}")
except Exception as e:
    print(f"Errore imprevisto: {e}")

Utilizzo dei Modelli di Dati

La libreria fornisce modelli di dati per lavorare con i dati delle tracce analizzate:

from credit_card_stripe_parser.models import TrackOneModel, TrackTwoModel

# Crea un'istanza di TrackOneModel
track1 = TrackOneModel(
    format_code='B',
    pan='5168755544412233',
    card_holder_name='MARIO ROSSI',
    expiration_date='2512',
    service_code='123',
    discretionary_data='123456789012345678901',
    source_string='%B5168755544412233^MARIO ROSSI^251212312345678901234567890?'
)

# Crea un'istanza di TrackTwoModel
track2 = TrackTwoModel(
    pan='5168755544412233',
    expiration_date='2512',
    service_code='123',
    pvki=None,
    pvv_or_cvv='1234',
    discretionary_data='123456789012345678901234567890',
    source_string=';5168755544412233=2512123123412345678901234567890?'
)

Utilizzo Avanzato

Validazione Personalizzata

Puoi implementare una validazione personalizzata creando una sottoclasse del parser:

from credit_card_stripe_parser import FullTrackParser

class CustomTrackParser(FullTrackParser):
    def validate_track_one(self, track_data: str) -> bool:
        # Logica di validazione personalizzata per la Traccia 1
        if not super().validate_track_one(track_data):
            return False
        # Aggiungi qui la validazione personalizzata
        return True

    def validate_track_two(self, track_data: str) -> bool:
        # Logica di validazione personalizzata per la Traccia 2
        if not super().validate_track_two(track_data):
            return False
        # Aggiungi qui la validazione personalizzata
        return True

Validazione LRC

Per abilitare la validazione LRC (Longitudinal Redundancy Check):

parser = FullTrackParser(validate_lrc=True)

# Questo genererà un'eccezione se la validazione LRC fallisce
try:
    result = parser.parse(track_data_with_lrc)
except Exception as e:
    print(f"Validazione LRC fallita: {e}")

Nota La validazione LRC richiede che i dati della traccia includano il carattere LRC alla fine.

Domande Frequenti (FAQ)

Domande Generali

Qual è lo scopo di questa libreria?

Questa libreria è progettata per analizzare ed elaborare i dati delle bande magnetiche delle carte di credito a scopo didattico e di test.

È sicuro utilizzarla in produzione?

Questo strumento dovrebbe essere utilizzato in conformità con i requisiti PCI DSS e le leggi applicabili. Assicurati sempre che siano in atto le opportune misure di sicurezza quando gestisci i dati delle carte di pagamento.

Domande Tecniche

Quali formati di tracce sono supportati?

La libreria supporta i formati Traccia 1 e Traccia 2 come specificato negli standard ISO/IEC 7811-2 e ISO/IEC 7813.

Come gestisco gli errori durante l’analisi?

La libreria fornisce eccezioni specifiche per diversi scenari di errore. Vedi la sezione Gestione degli Errori per esempi.

Considerazioni sulla Sicurezza

Come devo gestire i dati sensibili delle carte?

Segui sempre i requisiti PCI DSS quando gestisci i dati delle carte di pagamento. La libreria include funzioni di supporto per mascherare le informazioni sensibili.

Esempio di mascheramento del PAN:

def maschera_pan(pan):
    if len(pan) <= 4:
        return pan
    return '*' * (len(pan) - 4) + pan[-4:]

Licenza

Questo progetto è concesso in licenza con la Licenza GPLv3 - vedi il file LICENZA per i dettagli.