यहां मैं क्रेडिट कार्ड नंबर को मान्य करने और इसके प्रकार की पहचान करने के लिए पीएल/एसक्यूएल संग्रहीत फ़ंक्शन का एक उदाहरण दे रहा हूं, चाहे वह वीज़ा, मास्टरकार्ड या अमेरिकन एक्सप्रेस क्रेडिट कार्ड हो। मैं LUHN एल्गोरिथम का उपयोग करके क्रेडिट कार्ड नंबर की जांच कर रहा हूं जिसका उपयोग विभिन्न पहचान संख्याओं को मान्य करने के लिए किया जाता है। यदि क्रेडिट कार्ड नंबर मान्य है, तो फ़ंक्शन इसके प्रकार की जांच करता है।
Oracle में क्रेडिट कार्ड नंबर और उसके प्रकार की पुष्टि करने के लिए PL/SQL फ़ंक्शन उदाहरण
निम्नलिखित फ़ंक्शन क्रेडिट कार्ड नंबर के रूप में एक तर्क लेता है और फिर Luhn एल्गोरिथम का उपयोग करके संख्या को मान्य करता है और उसका प्रकार देता है। वर्तमान में, यह PL/SQL फ़ंक्शन तीन प्रकार के क्रेडिट कार्डों का समर्थन करता है जो वीज़ा, मास्टरकार्ड और अमेरिकन एक्सप्रेस हैं। आप अधिक क्रेडिट कार्ड प्रकार जोड़ने के लिए संशोधित कर सकते हैं। फ़ंक्शन CHECK_LUHN_ALGO Luhn एल्गोरिथम का उपयोग करके संख्या की जांच करने के लिए VALIDATE_CC फ़ंक्शन के अंदर लिखा गया है, इसलिए यदि आप अधिक कार्ड प्रकार का समर्थन जोड़ना चाहते हैं तो CHECK_LUHN_ALGO फ़ंक्शन को बदलने की कोई आवश्यकता नहीं है, केवल 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; परीक्षा
परीक्षण के लिए नीचे दिए गए 4047xxxxxxxxxxxx स्ट्रिंग को अपने वीज़ा, मास्टरकार्ड या एमेक्स क्रेडिट कार्ड नंबर से बदलें।
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; /
आउटपुट
A Valid Visa Credit Card Number. PL/SQL procedure successfully completed.
नोट: अपने आवेदन में लागू करने से पहले अच्छी तरह जांच लें।
यह भी देखें:
- Oracle में PL/SQL का उपयोग करके ईमेल पते की पुष्टि करें