Een creditcardnummer is geen "nummer" in wiskundige zin, het is gewoon een reeks cijfers. U hoeft nooit te vragen "wat is dit kaartnummer plus één?" of "...maal twee?", maar u kunt vragen "wat zijn de eerste vier cijfers van dit kaartnummer?" of "de laatste vier...?"
Als u het wel als een getal behandelt, is het een veel groter getal dan u normaal zou gebruiken:44443333322221111 (een Visa-testkaartnummer) is "4 quadriljoen 444 biljoen 333 miljard 322 miljoen 221 duizend 1 honderd en 11".
Belangrijk is dat het grootste getal dat kan worden opgeslagen in een 32-bits geheel getal met teken - wat je krijgt als je "int" opgeeft in SQL - slechts meer dan 2 miljard is, dus een kaartnummer komt niet in de buurt van passend. Je database geeft je ofwel een foutmelding, of je slaat gewoon een ander nummer op dat wel past - in jouw geval slaat het gewoon het hoogste nummer op dat mogelijk is.
Je zou je kolom kunnen veranderen in een "bigint" (64-bits ondertekend, maximale waarde ongeveer 9 triljoen), maar je kunt ze beter behandelen als strings in je PHP en VarChar in je database.