Ici, je donne un exemple de fonction stockée PL/SQL pour valider le numéro de carte de crédit et identifier son type, qu'il s'agisse d'une carte de crédit Visa, MasterCard ou American Express. Je vérifie le numéro de carte de crédit à l'aide de l'algorithme LUHN qui est utilisé pour valider une variété de numéros d'identification. Si le numéro de carte de crédit est valide, la fonction vérifie son type.
Exemple de fonction PL/SQL pour valider le numéro de carte de crédit et son type dans Oracle
La fonction suivante prend un argument comme numéro de carte de crédit, puis valide le numéro à l'aide de l'algorithme de Luhn et renvoie son type. Actuellement, cette fonction PL/SQL prend en charge trois types de cartes de crédit qui sont Visa, MasterCard et American Express. Vous pouvez modifier pour ajouter plus de types de cartes de crédit. La fonction CHECK_LUHN_ALGO pour vérifier le nombre à l'aide de l'algorithme de Luhn est écrite dans la fonction VALIDATE_CC, donc si vous souhaitez ajouter la prise en charge de plusieurs types de cartes, il n'est pas nécessaire de modifier la fonction CHECK_LUHN_ALGO, ne modifiez que la partie principale de la fonction VALIDATE_CC.
CREATE OR REPLACE FUNCTION validate_CC (cc_number IN VARCHAR2) RETURN VARCHAR2 IS v_ret_string VARCHAR2 (100); FUNCTION check_luhn_algo (p_ccnumber VARCHAR2) RETURN NUMBER IS i NUMBER; n_ntoi SMALLINT; n_retval SMALLINT; n_calc NUMBER := 0; n_ntoc NUMBER; 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); END LOOP; n_retval := SIGN (MOD (n_calc, 10)); RETURN n_retval; EXCEPTION WHEN OTHERS THEN RETURN 1; END check_luhn_algo; BEGIN /* Credit card number is invalid if below funciton returns non zero value */ IF check_luhn_algo (cc_number) != 0 THEN v_ret_string := 'Not a valid Credit Card Number.'; RETURN v_ret_string; ELSE v_ret_string := 'A Valid '; END IF; /* Credit card number is valid now check for its type */ IF SUBSTR (cc_number, 1, 1) = '4' /* check if it is a Visa card */ THEN IF LENGTH (cc_number) = 13 OR LENGTH (cc_number) = 16 THEN v_ret_string := v_ret_string || 'Visa Credit Card Number.'; END IF; ELSIF SUBSTR (cc_number, 1, 2) BETWEEN 51 AND 55 /* check if master card*/ THEN IF LENGTH (cc_number) = 16 THEN v_ret_string := v_ret_string || 'MasterCard Credit Card Number.'; END IF; ELSIF SUBSTR (cc_number, 1, 2) = 34 OR SUBSTR (cc_number, 1, 2) = 37 /* check if amex card */ THEN IF LENGTH (cc_number) = 15 THEN v_ret_string := v_ret_string || 'American Express Credit Card Number.'; END IF; ELSE v_ret_string := v_ret_string || 'But unable to identify its type.'; END IF; RETURN v_ret_string; EXCEPTION WHEN OTHERS THEN RETURN 'Error...'; END validate_CC;
Tester
Remplacez la chaîne 4047xxxxxxxxxxxx ci-dessous par votre numéro de carte de crédit Visa, MasterCard ou Amex à tester.
SET SERVEROUTPUT ON; DECLARE RetVal VARCHAR2 (100); CC_NUMBER VARCHAR2 (100); BEGIN CC_NUMBER := '4047xxxxxxxxxxxx'; RetVal := VALIDATE_CC (CC_NUMBER); DBMS_OUTPUT.put_line (retval); END; /
Sortie
A Valid Visa Credit Card Number. PL/SQL procedure successfully completed.
Remarque : Testez soigneusement avant de mettre en œuvre dans votre application.
Voir aussi :
- Valider l'adresse e-mail à l'aide de PL/SQL dans Oracle