Berikut saya berikan contoh fungsi PL/SQL yang tersimpan untuk memvalidasi nomor Kartu Kredit dan mengidentifikasi jenisnya, apakah itu Kartu Kredit Visa, MasterCard atau American Express. Saya memeriksa nomor Kartu Kredit menggunakan Algoritma LUHN yang digunakan untuk memvalidasi berbagai nomor identifikasi. Jika nomor Kartu Kredit valid, maka fungsi akan memeriksa jenisnya.
Contoh Fungsi PL/SQL untuk Memvalidasi Nomor Kartu Kredit dan Jenisnya di Oracle
Fungsi berikut mengambil argumen sebagai nomor Kartu Kredit dan kemudian memvalidasi nomor tersebut menggunakan algoritma Luhn dan mengembalikan tipenya. Saat ini, fungsi PL/SQL ini mendukung tiga jenis Kartu Kredit yaitu Visa, MasterCard, dan American Express. Anda dapat memodifikasi untuk menambahkan lebih banyak jenis Kartu Kredit. Fungsi CHECK_LUHN_ALGO untuk mengecek nomor dengan menggunakan algoritma Luhn ditulis di dalam fungsi VALIDATE_CC, jadi jika ingin menambahkan lebih banyak dukungan jenis kartu maka tidak perlu mengubah fungsi CHECK_LUHN_ALGO, ubah hanya bagian utama dari fungsi 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;
Uji
Ubah string 4047xxxxxxxxxxxx di bawah dengan nomor Visa, MasterCard, atau Kartu Kredit Amex Anda untuk menguji.
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; /
Keluaran
A Valid Visa Credit Card Number. PL/SQL procedure successfully completed.
Catatan: Uji secara menyeluruh sebelum menerapkan di aplikasi Anda.
Lihat juga:
- Validasi Alamat Email menggunakan PL/SQL di Oracle