Regulární výraz je posloupnost znaků, která tvoří vyhledávací vzor. Regulární výrazy se používají hlavně pro vyhledávání, ověřování a transformaci textů nebo řetězců.
Naučte se, jak ověřit čísla kreditních karet, jako jsou Mastercard, Visa Card a American Express, pomocí regulárních výrazů.
Kdy použít RegEx k ověření čísla kreditní karty?
Služby třetích stran účtují za každý pokus o transakci. Ať už je transakce úspěšná nebo ne, musíte zaplatit poplatky. V takových případech chcete odmítnout čísla kreditních karet, která jsou zjevně neplatná. Čísla kreditních karet můžete rychle ověřit pomocí regulárních výrazů.
U své platební funkce se však nemůžete zcela spolehnout na ověření regulárního výrazu. Vydavatelé karet pravidelně mění své vzory čísel karet (zavádějí nové vzory nebo stahují staré), takže metoda regulárních výrazů není nejrobustnějším řešením. I když se můžete pokusit udržet na vrcholu vzorů karet ze zdroje, jako je Wikipedie který je často aktualizován.
Pomocí regulárního výrazu můžete také rychle najít značku karty, kterou pak můžete použít k zobrazení log nebo štítků.
Regulární výrazy mají několik praktických případů použití. Linuxový příkaz grep je pravděpodobně nejběžnějším praktickým případem použití regulárního výrazu.
Kód použitý v tomto projektu je k dispozici v a úložiště GitHub a můžete jej používat zdarma pod licencí MIT.
RegEx pro ověření čísla Mastercard
Číslo Mastercard je platné, pokud splňuje následující podmínky:
- Řetězec by neměl obsahovat žádné speciální znaky, abecedy nebo mezery.
- Počet znaků musí být roven 16.
- Řetězec by měl začínat buď 2místným číselným rozsahem (v rozsahu 51 až 55) nebo 4místným číselným rozsahem (v rozsahu 2221 až 2720).
- Pokud řetězec začíná dvoumístným číselným rozsahem (v rozsahu od 51 do 55), dalších 14 číslic musí být číslo od 0 do 9.
- Pokud řetězec začíná 4místným číselným rozsahem (v rozsahu od 2221 do 2720), dalších 12 číslic musí být číslo od 0 do 9.
Následující regulární výraz splňuje výše uvedené podmínky a může ověřit číslo Mastercard:
^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\\d|2[3-6]\\d{2}|27[ 0-1]\\d|2720)[0-9]{12}$
Pokud vám výše uvedený výraz nevyhovuje, podívejte se průvodce regulárními výrazy pro začátečníky První.
Výše uvedený regulární výraz můžete použít k ověření čísla Mastercard v jakémkoli programovacím jazyce. Zde je návod, jak to udělat v Pythonu:
import re
defcheckMasterCardNo(číslo karty):
regulární výraz = "^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\\d|2[3-6]\\d{2}|27[ 0-1]\\d|2720)[0-9]{12}$"
r = re.compile (regulární výraz)-li (re.Vyhledávání(r, číslo karty)):
tisk("Platný")
jiný:
tisk("Neplatný")karta1 = "5110762060017101"
checkMasterCardNo (karta 1)
karta2 = "8632458236982734"
checkMasterCardNo (card2)
Spuštěním tohoto kódu potvrdíte, že první číslo je platné, ale druhé ne:
RegEx pro ověření čísla karty Visa
Číslo karty Visa je platné, pokud splňuje následující podmínky:
- Řetězec by neměl obsahovat žádné speciální znaky, abecedy nebo mezery.
- Řetězec by měl začínat 4.
- Počet znaků musí být roven 13 nebo 16. Staré vízové karty mají 13 znaků a nové 16 znaků.
- Pokud je počet znaků roven 13, posledních 12 číslic musí být číslo od 0 do 9.
- Pokud je počet znaků roven 16, posledních 15 číslic musí být číslo od 0 do 9.
Následující regulární výraz splňuje výše uvedené podmínky a můžete jej použít k ověření čísla karty Visa:
^4[0-9]{12}(?:[0-9]{3})?$
Níže je uveden přístup Pythonu k ověření čísla karty Visa:
import re
defzkontrolovatVisaCardNo(číslo karty):
regulární výraz = "^4[0-9]{12}(?:[0-9]{3})?$"
r = re.compile (regulární výraz)-li (re.Vyhledávání(r, číslo karty)):
tisk("Platný")
jiný:
tisk("Neplatný")karta1 = "4539890694174109"
checkVisaCardNo (card1)
karta2 = "49237429498"
checkVisaCardNo (card2)
Výstup opět potvrzuje, že první číslo je platné, zatímco druhé je neplatné:
RegEx pro ověření čísla karty American Express
Číslo karty American Express je platné, pokud splňuje následující podmínky:
- Řetězec by neměl obsahovat žádné speciální znaky, abecedy nebo mezery.
- Tento počet znaků musí být roven 15.
- Řetězec by měl začínat 34 nebo 37.
- Posledních 13 číslic musí být číslo od 0 do 9.
Následující regulární výraz splňuje výše uvedené podmínky a můžete jej použít k ověření čísla karty American Express:
^3[47][0-9]{13}$
Číslo karty American Express můžete ověřit pomocí následujícího kódu Python:
import re
defcheckAmerican ExpressCardNo(číslo karty):
regulární výraz = "^3[47][0-9]{13}$"
r = re.compile (regulární výraz)-li (re.Vyhledávání(r, číslo karty)):
tisk("Platný")
jiný:
tisk("Neplatný")karta1 = "372831730491196"
checkAmerican ExpressCardNo (card1)
karta2 = "84732593847743042"
checkAmerican ExpressCardNo (card2)
Výstup ještě jednou potvrdí, že první číslo je platné, ale druhé je neplatné:
Aplikace regulárních výrazů
K ověření běžných čísel kreditních karet můžete použít poměrně jednoduchý regulární výraz. RegEx je výkonný nástroj, který můžete použít pro předběžné zpracování dat, porovnávání vzorů, extrakci dat, lexikální analýzu, zpracování přirozeného jazyka, web scraping a další. Regulární výrazy můžete také použít při vývoji webu pro zpracování validace formulářů HTML.