使用不同格式验证和排序各种序列号?

时间:2010-10-20 16:49:28

标签: c#

我面临以下问题。我需要在c#中捕获一系列序列号以存储在数据库中。如果这些序列号只是数字,那很好,但是我遇到了字母序列号,例如:

56AAA71064D6和56AAA7105A25

如何容纳序列号范围可能存在的不同可能性?

假设所有序列号都有一些顺序,我该如何解析它的顺序部分?

数据库已将序列号作为字符串。

2 个答案:

答案 0 :(得分:0)

如果您的数据库假定序列号是数字,则您需要更改数据库的该部分以允许使用字母数字值,或者定义新的映射表以将外部序列号与唯一的数字ID相关联,以便您可以继续使用数字作为数据库内部表示的序列号。

您还必须添加支持,以并发安全的方式为给定的字母数字输入分发新的,唯一的内部序列号。

编辑:我的意思是,当必须在数据库中注册新的字母数字序列号时,您应该使用原子方式将记录添加到原始(数字)序列号列表并添加新表中的第二条记录,用于将数值与字母数字值相关联。如果这不是原子的,那么该计划就会崩溃。移除也必须以原子方式处理。

答案 1 :(得分:0)

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

你必须使用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,以使它们具有相同的大小。