如何使用正則表示式驗證Visa卡號?


Visa信用卡或簽帳金融卡分配一個16位的唯一識別符號,稱為Visa卡號。該號碼通常印在卡的正面,用於在購物或進行交易時查詢持卡人的賬戶。Visa卡號的前六位數字代表髮卡銀行,其餘數字則對賬戶號碼和持卡人唯一。為了驗證號碼的準確性並防止欺詐,Visa卡號還有一個額外的校驗位。

方法

使用正則表示式驗證Visa卡號的方法如下:

  • 解釋正則表示式

  • 確定模式

方法一:解釋正則表示式

要建立一個符合Visa卡號模式的正則表示式,我們可以使用字元類、量詞和分組。

語法

以下語法可在C++中使用,用於使用正則表示式驗證Visa卡號:

  • 透過包含regex標頭檔案來使用正則表示式。

  • 建立一個與Visa卡號結構相似的正則表示式模式。Visa卡號始終包含16位數字,且第一位數字為4。模式可以解釋為:

std::regex pattern("^4[0-9]{15}$");

任何以4開頭,後面跟著15位數字的字串都符合此模式。

  • 使用std::regex_match()函式,找出使用者提供的Visa卡號是否與正則表示式模式匹配。std::regex_match()方法的兩個輸入是待測試的字串和用於測試它的正則表示式模式。如果字串匹配所需的模式,則方法返回true。否則,返回false。

std::string visa Number = "1234567890123456";
if (std::regex_match(visa Number, pattern)) {
   std::cout << "Valid Visa card number." << std::endl;
} else {
   std::cout << "Invalid Visa card number." << std::endl;
}

演算法

驗證Visa卡號的正則表示式演算法如下:

步驟1 - 要在正則表示式中匹配Visa卡號,首先建立一個模式。模式的第一個字元應為"^",表示字串的開頭,"4"表示Visa卡。接下來的15個字元都可能是數字。字串的結尾應由模式結尾處的"$"符號表示。Visa卡號由正則表示式模式"4[0-9]{15}$"表示。

步驟2 - 獲取輸入的Visa卡號的字串表示。

步驟3 - 使用正則表示式引擎將Visa卡號與正則表示式中的模式進行比較。

步驟4 - 如果Visa卡號與正則表示式模式匹配,則它是有效的Visa卡號。不匹配的Visa卡號被認為是無效的。

步驟5 - 還可以透過使用卡的數字計算校驗和來檢查Visa卡號是否仍然有效。在將每個額外的數字新增到其他數字以建立校驗和之前,必須先將其乘以二。只要總和是10的倍數,就可以使用任何卡號。卡號必須是10的倍數,否則無效。

步驟6 - 返回驗證結果:"有效"或"無效"。

示例1

這是一個使用正則表示式驗證Visa卡號的C++示例:

此示例首先定義正則表示式模式4[0-9]{12}(?:[0-9]{3})?,該模式對應於Visa卡上的金額。為了匹配此模式,字串必須以4開頭,後跟12位數字,然後要麼再有3位數字,要麼沒有。使用相同的模式構造std::regex物件,使用std::regex_match()函式來查詢該模式是否與提供的Visa卡號匹配。"有效的Visa卡號"作為輸出,如果卡號與模式匹配;否則,輸出"無效的Visa卡號"。

#include <iostream>
#include <regex>
#include <string>
using namespace std;

int main() {
   std:: regex visa_regex("^4[0-9]{12}(?:[0-9]{3})?$");
   std:: string visa_card_number = "4123456789012345";

   if (std::regex_match(visa_card_number, visa_regex)) {
      cout << "Valid Visa card number" << endl;
   } else {
      cout << "Invalid Visa card number" << endl;
   }
   return 0;
}

輸出

Valid Visa card number

方法二:確定模式

Visa卡號通常以'4'開頭,長度為13到16位。第一位數字是常數或固定的,其餘數字可以不同。基於此資訊,可以建立一個正則表示式模式。

語法

要使用正則表示式驗證Visa卡號,可以使用以下匹配方法的語法。

^4[0-9]{12}(?:[0-9]{3})?$

在此正則表示式模式中:

  • ^ 表示輸入的開頭。

  • 4 表示卡號必須以數字4開頭,因為Visa卡號總是如此。

  • [0-9]{12} 指定接下來的12個字元必須是0到9之間的數字。

  • (?:[0-9]{3})? 允許在卡號末尾可選地新增3位數字組,由(?: ... )?表示。此組包含在(?: ... )中以使其不進行捕獲。

  • $ 表示輸入的結尾。

演算法

要使用正則表示式驗證Visa卡號,可以按照以下演算法:

步驟1 - 定義Visa卡號的正則表示式模式。Visa卡號通常以數字4開頭,總長度為16位。

步驟2 - 建立一個函式或方法來實現驗證演算法。我們將其稱為validateVisaCardNumber

步驟3 - 在validateVisaCardNumber函式中,獲取卡號作為輸入。

步驟4 - 使用程式語言中的正則表示式匹配函式將正則表示式模式應用於卡號。如果卡號與模式匹配,此函式應返回一個反映此事實的布林值結果。

步驟5 - 如果正則表示式模式與卡號匹配,則返回true以表明該卡號對於Visa卡是有效的。

步驟6 - 如果正則表示式模式與卡號不匹配,則返回false以表明該卡號對於Visa卡是無效的。

示例2

一個顯示如何使用正則表示式驗證Visa卡號的示例:

在此示例中,isVisaCardValid函式使用正則表示式模式(4[0-9]{12}(?:[0-9]{3})?$ )檢查卡號是否是有效的Visa卡號。主函式然後使用兩個示例卡號驗證該函式,然後顯示結果。

請注意,此正則表示式模式只能用於Visa卡號。其他卡型別(例如萬事達卡和美國運通卡)應使用不同的模式。

#include <iostream>
#include <regex>

bool isVisaCardValid(const std::string& cardNumber) {
   // Define the regular expression pattern for Visa card numbers
   std::regex pattern("^4[0-9]{12}(?:[0-9]{3})?$");

   // Match the card number against the pattern
   return std::regex_match(cardNumber, pattern);
}

int main() {
   // Test cases
   std::string cardNumber1 = "4532015112890367";  // Valid Visa card number
   std::string cardNumber2 = "378282246310005";   // Not a Visa card number

   // Validate the Visa card numbers
   bool isValid1 = isVisaCardValid(cardNumber1);
   bool isValid2 = isVisaCardValid(cardNumber2);

   // Display the results
   std::cout << "Card Number 1 is " << (isValid1 ? "valid" : "invalid") << std::endl;
   std::cout << "Card Number 2 is " << (isValid2 ? "valid" : "invalid") << std::endl;

   return 0;
}

輸出

Card Number 1 is valid
Card Number 2 is invalid

結論

總之,開發人員和組織可以利用使用正則表示式驗證Visa卡號的便捷技術,以確保客戶提交的信用卡和簽帳金融卡號碼安全有效。驗證Visa卡號的正則表示式通常包括檢查號碼的長度、確保它以正確的數字開頭,並確保它透過Luhn演算法檢查。企業可以透過對Visa卡號使用正則表示式驗證來降低欺詐交易的風險並提高其支付系統的安全性。

更新於:2023年7月31日

1K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.