C# 验证和排序各种不同格式的序列号?

C# 验证和排序各种不同格式的序列号?,c#,C#,我面临以下问题。我需要在c#中捕获一系列序列号以存储在数据库中。如果这些序列号只是数字,这很好,但我遇到了字母数字序列号,例如: 56AAA71064D6和56AAA7105A25 我如何适应序列号范围可能存在的不同可能性 假设所有序列号都有一定的顺序,如何解析序列号的顺序部分 数据库已将序列号作为字符串。如果数据库假定序列号为数字,则需要更改数据库的该部分以允许字母数字值,或者定义一个新的映射表,将外部序列号与唯一的数字ID关联起来,以便您可以继续使用数字作为序列号的数据库内部表示形式 您还必

我面临以下问题。我需要在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;
}
int MaxLength=20;
专用字符串填充(字符串val){
如果(值长度<20){
val=新字符串('0',MaxLength-val.Length)+val;
}
返回val;
}
public bool IsBetween(字符串编号、字符串开始、字符串结束){
num=Pad(num);
开始=Pad(num);
结束=焊盘(数量);

return String.Compare(num,start)>=0&&String.Compare(num,end)到底是什么问题?这是关于如何存储值的问题吗?您需要将它们存储为字符串。
String serialNumber
在C#中或
serialNumber VARCHAR(某物)
在sql中?是否要在数据库架构中强制执行序列的格式?我的猜测是这些是十六进制数。因此,一个选项是解析这些十六进制字符串并存储数字。(这只是基于两个样本集的猜测,很可能是错误的。)就我个人而言,我仍然不理解你的问题。对一个键表示的序列号进行排序通常意味着调用一个内置的排序函数,尽管如果需要特殊规则,可能需要传递一个比较委托或其他什么。检查一个键是否有效没有实际意义,除非你从一个格式开始并希望验证e键适合它,或者只是想检查它是否在数据库中。你想解决什么问题?你能解释一下你的第二段吗,可能有一个例子吗?谢谢问题是序列号的宽度和格式可能不同。我添加了填充代码,可以用前导零填充较小的数字,这将使它们的宽度都相同。如果愿意,可以将“0”替换为空白。如果需要不区分大小写的比较,可以将大小写更改为大写。