簡體   English   中英

驗證和排序具有不同格式的各種序列號?

[英]Validate and sort a variety of serial numbers with different formats?

我面臨以下問題。 我需要捕獲c#中要存儲在數據庫中的一系列序列號。 如果這些序列號只是數字,那很好,但是我遇到了字母數字的序列號,例如:

56AAA71064D6和56AAA7105A25

如何適應序列號范圍可能存在的不同可能性?

假設所有序列號都有一定順序,我該如何解析其順序部分?

數據庫已經將序列號作為字符串。

如果您的數據庫假定序列號為數字,則您需要更改數據庫的該部分以允許字母數字值,或者定義新的映射表以將外部序列號與唯一的數字ID相關聯,以便您可以繼續使用數據庫的內部“序列”號的數字。

您還必須添加支持,以並發安全的方式為給定的字母數字輸入分發新的唯一內部序列號。

編輯:我的意思是,當必須在數據庫中注冊新的字母數字序列號時,您應該使用一個將原子記錄添加到原始(數字)序列號並在其中添加第二條記錄的事務來執行此操作。將數值與字母數字值相關聯的新表。 如果這不是原子的,則該方案將失敗。 清除也必須原子處理。

如果您的序列號具有相同的寬度,那么它很容易...

您必須使用string.compare方法來獲取范圍。

int MaxLength = 20;

private string Pad(string val){
   if(val.Length < 20){
      val = new String('0', MaxLength - val.Length) + val;
   }
   return val;
}

public bool IsBetween(string num, string start, string end){
    num = Pad(num);
    start = Pad(num);
    end = Pad(num);
    return String.Compare(num,start)>=0 && String.Compare(num,end)<=0;
}

而且,如果您對所有序列號進行排序,那么您可以輕松地提取范圍。

如果它們的寬度不同,則必須在較小長度的字符串之前填充0,以使它們都具有相同的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM