如何使用正則表示式驗證ISIN?


在這個問題中,我們將使用正則表示式在 C++ 中驗證 ISIN 編號。

ISIN 代表國際證券識別號碼。它是一個用於識別股票、金融債券等的唯一程式碼。ISIN 編號的長度可以是 12 或 14,它提供了對特定物品的國際識別。

讓我們瞭解 ISIN 編號的格式。

  • 國家程式碼 - 它以兩個國家程式碼字元開頭。

  • 識別符號 - 它包含國家程式碼後的 9 個字母數字字元。

  • 校驗和 - 它包含一個用於檢測 ISIN 編號錯誤的單個數字。

  • 它可能在國家程式碼和識別符號之後包含連字元 (-)。

問題陳述 - 我們以字串格式給出了一個 ISIN 編號。我們需要使用正則表示式驗證 ISIN 編號。

示例

輸入

str1 = "SB0123456A98"

輸出

Yes

解釋

ISIN 編號有效,因為它遵循 ISIN 程式碼的所有規則。

輸入

str1 = "US-01207199D-8"

輸出

Yes

解釋

這是一個有效的 ISIN 編號。

輸入

str1 = "USerw01207199D8"

輸出

No

解釋

識別符號的長度為 12。因此,這是一個無效的 ISIN 編號。

使用者可以使用以下正則表示式來驗證 ISIN 編號。

^[A-Z]{2}[-]{0,1}[A-Z0-9]{9}[-]{0,1}[0-9]{1}$
  • ^ - 正則表示式的開頭。

  • [A-Z]{2} - 兩個字元的國家程式碼。

  • [-]{0,1} - 它可能包含連字元 (-)。

  • [A-Z0-9]{9} - 長度為 9 的識別符號,包含從 A 到 Z 和 0 到 9 的字元。

  • [0-9]{1} - 最後一位校驗和數字。

  • $ - 正則表示式的結尾。

方法 1

在這種方法中,我們將使用 C++ 的 'regex' 庫從字串建立正則表示式模式,並使用 regex_match() 方法驗證 ISIN 編號。

演算法

  • 步驟 1 - 定義如上所述的名為 'isinPat' 的正則表示式。

  • 步驟 2 - 如果字串為空,則列印“無效字串”。

  • 步驟 3 - 在傳遞 ISIN 編號字串作為第一個引數和搜尋模式作為第二個引數後,執行 regex_match() 方法。

  • 步驟 4 - 如果 ISIN 字串有效,則列印“是”。否則,列印“否”。

示例

#include <bits/stdc++.h>
#include <regex>
using namespace std;

void ISINValidation(string isinStr) {
   // Define the ReGex pattern for isinStr
   const regex isinPat("^[A-Z]{2}[-]{0,1}[A-Z0-9]{9}[-]{0,1}[0-9]{1}$");
   
   // For empty string
   if (isinStr.empty()) {
      cout << "The ISIN string is empty\n";
   }
   
   // Matching the string with regex
   if (regex_match(isinStr, isinPat)) {
      cout << "The ISIN string " << isinStr << " is valid\n";
   } else {
      cout << "The ISIN string " << isinStr << " is invalid\n";
   }
}
int main() {
   string str1 = "SB0123456A98";
   ISINValidation(str1);
   string str2 = "US-01207199D-8";
   ISINValidation(str2);
   return 0;
}

輸出

The ISIN string SB0123456A98 is valid
The ISIN string US-01207199D-8 is valid

時間複雜度 – O(N),與 regex_match() 方法的時間複雜度相同。

空間複雜度 – O(1)

方法 2

此方法使用 regex_search() 方法驗證 ISIN 編號。當 regex_search() 方法在字串中找到模式的第一個匹配項時,它將返回 true。

演算法

  • 步驟 1 - 對空字串返回 false。

  • 步驟 2 - 使用 regex_search() 方法驗證 ISIN 字串。

  • 步驟 3 - 如果 ISIN 字串有效,則從函式返回 true。否則,返回 false。

示例

#include <bits/stdc++.h>
#include <regex>
using namespace std;

bool ISINValidation(string isinStr) {
   // Define the ReGex pattern for isinStr
   const regex isinPat("^[A-Z]{2}[-]{0,1}[A-Z0-9]{9}[-]{0,1}\\d$");
   
   // For empty string
   if (isinStr == "") {
      return false;
   }
   
   // Matching the string with regex
   if (regex_search(isinStr, isinPat)) {
      return false;
   } else {
      return true;
   }
}
int main() {
   string str1 = "SB0123456A98";
   if (ISINValidation(str1)) {
      cout << "The ISIN number " << str1 << " is valid" << endl;
   } else {
      cout << "The ISIN number " << str1 << " is not valid" << endl;
   }
   return 0;
}

輸出

The ISIN number SB0123456A98 is not valid

時間複雜度 – O(N) 用於在字串中搜索模式。

空間複雜度 – O(1)

regex_match() 將整個字串與模式匹配,而 regex_search() 對部分匹配返回 true。因此,在某些情況下,regex_search() 方法可能會給出錯誤的輸出。

更新於: 2023 年 8 月 31 日

709 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.