Verificare una carta di credito con l’algoritmo di Luhn
Questo validatore elimina gli spazi e i trattini comuni dal numero fornito, controlla che ogni carattere restante sia una cifra e applica il checksum deterministico di Luhn.
Esegui gratis nel browser
Indica inoltre il circuito probabile in base ai prefissi riconosciuti di Visa, Mastercard, American Express e Discover. Il risultato può individuare frequenti errori di digitazione prima di una richiesta di pagamento, ma non prova che il conto esista, sia attivo, appartenga al cliente o possa completare un acquisto.
Normalizzazione e controllo dei dati inseriti
Inserisca il numero della carta come stringa, usando solo cifre oppure il consueto formato a gruppi separati da spazi o trattini. Il validatore rimuove esclusivamente questi due separatori. In seguito richiede che ogni carattere rimasto sia una cifra ASCII. Lettere, punteggiatura, barre, trattini bassi e qualsiasi altro simbolo producono un errore di input invece di essere ignorati silenziosamente. Questa regola rigorosa evita che una pulizia troppo permissiva trasformi un valore accidentale o malformato in un numero differente, dando un esito fuorviante. Vengono rifiutati anche una stringa vuota, un valore composto soltanto da separatori o un valore che non sia una stringa. L’oggetto restituito non ripete mai il numero normalizzato: contiene soltanto l’esito del checksum e il circuito probabile. Nella Sua applicazione tratti sempre il dato originale come informazione di pagamento sensibile, anche se questo calcolo locale non richiede consultazioni dell’emittente, autorizzazioni, richieste di rete, casualità o stato persistente.
Che cosa indica davvero il risultato di Luhn
L’algoritmo di Luhn calcola una cifra di controllo concepita per rilevare comuni errori di trascrizione. Partendo dalla cifra più a destra, il validatore alterna una cifra invariata e una raddoppiata. Se un valore raddoppiato supera nove, sottrae nove; quindi somma tutti i valori e considera superata la prova quando il totale è divisibile per dieci. Un risultato positivo significa soltanto che la sequenza è matematicamente coerente con la cifra di controllo finale. Non dimostra che una banca abbia emesso il numero, che il conto sia aperto, che disponga di fondi o che la persona sia autorizzata a usarlo. Una sequenza inventata può superare Luhn, mentre una carta autentica con una cifra errata di solito fallisce. Usi quindi l’esito come riscontro iniziale nel modulo o come controllo della qualità dei dati; affidi poi tokenizzazione, autenticazione, autorizzazione, controlli antifrode e decisione finale a un elaboratore di pagamenti conforme.
Come viene individuato il circuito probabile
Il circuito viene dedotto dal prefisso identificativo dell’emittente, non consultato in un registro remoto. Un numero che inizia con 4 viene indicato come Visa. Mastercard comprende l’intervallo tradizionale da 51 a 55 e quello più recente da 2221 a 2720. American Express utilizza 34 e 37. Discover comprende 6011, 65, l’intervallo da 644 a 649 e quello assegnato da 622126 a 622925. Se nessuna regola coincide, il circuito risulta sconosciuto, mentre il calcolo di Luhn prosegue normalmente. La parola probabile è fondamentale: le assegnazioni evolvono, esistono prodotti in co-branding e lo strumento riconosce volutamente soltanto i quattro circuiti richiesti. Il riconoscimento del prefisso e il checksum sono indipendenti; un numero può avere un prefisso noto ma fallire Luhn, oppure superare Luhn con circuito sconosciuto. Ogni richiesta usa il prezzo base pubblicato di $0.002, senza costi variabili legati alla lunghezza o al circuito rilevato.
Casi d'uso
Avviso durante la compilazione
Individui una probabile cifra errata prima di affidare i dati a un elaboratore conforme per l’autorizzazione.
Qualità dei dati importati
Controlli la struttura dei numeri provenienti da archivi senza affermare che i relativi conti siano ancora attivi.
Test dei moduli di pagamento
Verifichi che i separatori consentiti siano accettati e che i caratteri errati vengano rifiutati con coerenza.
Domande frequenti
Superare Luhn dimostra che la carta è reale?
No. Dimostra soltanto che le cifre rispettano un checksum. Esistenza, titolarità, stato, fondi e autorizzazione richiedono la risposta dell’elaboratore e dell’emittente.
Quali caratteri di formattazione posso usare?
Può includere spazi e trattini. Vengono rimossi prima del controllo; ogni altro carattere non numerico genera un errore di input.
Quali circuiti possono essere identificati?
Le regole dei prefissi riconoscono probabilmente Visa, Mastercard, American Express e Discover. Gli altri prefissi restituiscono sconosciuto.
Un prefisso riconosciuto può avere un checksum errato?
Sì. La classificazione del prefisso e il calcolo di Luhn sono indipendenti; un prefisso Visa non garantisce quindi un esito positivo.
Il validatore contatta una banca o un circuito?
No. Il risultato deriva da calcoli deterministici e regole sui prefissi, senza consultazioni remote né tentativi di autorizzazione.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/data/credit-card-luhn-validate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"4111 1111 1111 1111"}'const res = await fetch("https://api.kit.forhosting.com/data/credit-card-luhn-validate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"number": "4111 1111 1111 1111"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/credit-card-luhn-validate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"number": "4111 1111 1111 1111"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/credit-card-luhn-validate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"number":"4111 1111 1111 1111"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"number":"4111 1111 1111 1111"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/credit-card-luhn-validate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"number": "4111 1111 1111 1111"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.credit_card_luhn_validate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_mb | 25 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |