Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để xác thực số thẻ tín dụng và xác định loại thẻ bằng PL / SQL?

Ở đâ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
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 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

  2. 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)

  3. Quản lý mật khẩu và tài nguyên trong Oracle bằng cách sử dụng Hồ sơ

  4. Làm thế nào để trả về một mảng từ Java sang PL / SQL?

  5. Cách truy cập Oracle DB trong VirtualBox từ Máy chủ (windows)