sql >> Databáze >  >> RDS >> Oracle

Jak ověřit číslo kreditní karty a identifikovat její typ pomocí PL/SQL?

Zde uvádím příklad uložené funkce PL/SQL pro ověření čísla kreditní karty a identifikaci jejího typu, ať už jde o kreditní kartu Visa, MasterCard nebo American Express. Kontroluji číslo kreditní karty pomocí algoritmu LUHN, který se používá k ověření různých identifikačních čísel. Pokud je číslo kreditní karty platné, funkce zkontroluje jeho typ.

Příklad funkce PL/SQL pro ověření čísla kreditní karty a jejího typu v Oracle

Následující funkce převezme argument jako číslo kreditní karty a poté číslo ověří pomocí Luhnova algoritmu a vrátí jeho typ. V současné době tato funkce PL/SQL podporuje tři druhy kreditních karet, kterými jsou Visa, MasterCard a American Express. Můžete upravit a přidat další typy kreditních karet. Funkce CHECK_LUHN_ALGO pro kontrolu čísla pomocí Luhnova algoritmu je zapsána uvnitř funkce VALIDATE_CC, takže pokud chcete přidat podporu více typů karet, není třeba měnit funkci CHECK_LUHN_ALGO, změňte pouze hlavní část funkce VALIDATE_CC.

VYTVOŘTE NEBO NAHRAĎTE FUNKCI validate_CC (číslo_cc IN VARCHAR2) RETURN VARCHAR2IS v_ret_string VARCHAR2 (100); FUNKCE check_luhn_algo (p_ccnumber VARCHAR2) NÁVRATNÉ ČÍSLO JE i ČÍSLO; n_ntoi SMALLINT; n_retval SMALLINT; n_calc ČÍSLO :=0; n_ntoc ČÍSLO; BEGIN n_ntoc :=LENGTH (p_ccnumber); FOR i IN 1 .. n_ntoc LOOP n_ntoi :=TO_NUMBER (SUBSTR (p_ccnumber, n_ntoc + 1 - i, 1)); n_calc :=n_calc + MOD (i, 2) * n_ntoi + MOD (i + 1, 2) * SIGN (-SIGN (n_ntoi - 4) + 1) * (2 * n_ntoi) + MOD (i + 1, 2) * SIGN (SIGN (n_ntoi - 5) + 1) * (2 * n_ntoi - 9); KONEC SMYČKY; n_retval :=SIGN (MOD (n_calc, 10)); RETURN n_retval; VÝJIMKA KDYŽ PAK OSTATNÍ VRÁTÍ 1; END check_luhn_algo;BEGIN /* Číslo kreditní karty je neplatné, pokud funkce níže vrací nenulovou hodnotu */ IF check_luhn_algo (číslo_cc) !=0 THEN v_ret_string :='Neplatné číslo kreditní karty.'; RETURN v_ret_string; ELSE v_ret_string :='Platné '; KONEC KDYŽ; /* Číslo kreditní karty je platné nyní zkontrolujte jeho typ */ IF SUBSTR (číslo_cc, 1, 1) ='4' /* zkontrolujte, zda se jedná o kartu Visa */ THEN IF LENGTH (číslo_cc) =13 OR LENGTH (číslo_cc ) =16 THEN v_ret_string :=v_ret_string || 'Číslo kreditní karty Visa.'; KONEC KDYŽ; ELSIF SUBSTR (cc_number, 1, 2) MEZI 51 A 55 /* zkontrolujte, zda hlavní karta*/ THEN IF LENGTH (cc_number) =16 THEN v_ret_string :=v_ret_string || 'Číslo kreditní karty MasterCard.'; KONEC KDYŽ; ELSIF SUBSTR (cc_number, 1, 2) =34 NEBO SUBSTR (cc_number, 1, 2) =37 /* zkontrolujte, zda amex karta */ THEN IF LENGTH (cc_number) =15 THEN v_ret_string :=v_ret_string || 'Číslo kreditní karty American Express.'; KONEC KDYŽ; ELSE v_ret_string :=v_ret_string || 'Ale nelze identifikovat jeho typ.'; KONEC KDYŽ; RETURN v_ret_string;VÝJIMKA, KDYŽ POTOM OSTATNÍ VRÁTÍ „Chyba...“;END validate_CC;

Test

Změňte řetězec 4047xxxxxxxxxxxx níže za číslo své kreditní karty Visa, MasterCard nebo Amex, abyste jej otestovali.

NASTAVIT VÝSTUP SERVERU ZAPNUTO;DECLARE RetVal VARCHAR2 (100); CC_NUMBER VARCHAR2 (100);BEGIN CC_NUMBER :='4047xxxxxxxxxxxx '; RetVal :=VALIDATE_CC (CC_NUMBER); DBMS_OUTPUT.put_line (retval);END;/

Výstup

Procedura platného čísla kreditní karty Visa.PL/SQL byla úspěšně dokončena.

Poznámka: Před implementací do vaší aplikace důkladně otestujte.

Viz také:

  • Ověřte e-mailovou adresu pomocí PL/SQL v Oracle
  1. Je do MySQL vloženo nesprávné celé číslo (2147483647)?

  2. TABLESAMPLE vrací nesprávný počet řádků?

  3. Jak používat GROUP BY ke zřetězení řetězců v SQL Server?

  4. Jak načíst dvě odezvy Json Json Object a Array