Ở đây tôi đang đưa ra một ví dụ về chức năng được lưu trữ PL / SQL để xác thực số Thẻ tín dụng và xác định loại của nó, cho dù đó là Thẻ tín dụng Visa, MasterCard hay American Express. Tôi đang kiểm tra số Thẻ tín dụng bằng Thuật toán LUHN được sử dụng để xác thực nhiều loại số nhận dạng. Nếu số Thẻ tín dụng hợp lệ, thì chức năng sẽ kiểm tra loại của nó.
Ví dụ về hàm PL / SQL để xác thực số thẻ tín dụng và loại thẻ trong Oracle
Hàm sau nhận đối số là số Thẻ tín dụng, sau đó xác thực số bằng thuật toán Luhn và trả về kiểu của nó. Hiện tại, chức năng PL / SQL này hỗ trợ ba loại Thẻ tín dụng là Visa, MasterCard và American Express. Bạn có thể sửa đổi để thêm nhiều loại Thẻ tín dụng hơn. Hàm CHECK_LUHN_ALGO để kiểm tra số lượng bằng thuật toán Luhn được viết bên trong hàm VALIDATE_CC, vì vậy nếu bạn muốn bổ sung thêm các loại thẻ hỗ trợ thì không cần thay đổi hàm CHECK_LUHN_ALGO, chỉ thay đổi phần chính của hàm 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;
Kiểm tra
Thay đổi chuỗi 4047xxxxxxxxxxxx bên dưới bằng số Thẻ tín dụng Visa, MasterCard hoặc Amex của bạn để kiểm tra.
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; /
Đầu ra
A Valid Visa Credit Card Number. PL/SQL procedure successfully completed.
Lưu ý: Kiểm tra kỹ lưỡng trước khi triển khai trong ứng dụng của bạn.
Xem thêm:
- Xác thực Địa chỉ Email bằng PL / SQL trong Oracle
-
ORA-01461:có thể liên kết một giá trị LONG chỉ để chèn vào cột DÀI-Xảy ra khi truy vấn
-
Các chức năng có giá trị trên bảng trong ORACLE 11g? (các chế độ xem được tham số hóa)
-
Quản lý mật khẩu và tài nguyên trong Oracle bằng cách sử dụng Hồ sơ
-
Làm thế nào để trả về một mảng từ Java sang PL / SQL?
-
Cách truy cập Oracle DB trong VirtualBox từ Máy chủ (windows)