代码之家  ›  专栏  ›  技术社区  ›  Xaisoft

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

c#
  •  0
  • Xaisoft  · 技术社区  · 14 年前

    我面临着以下问题。我需要在C中捕获一系列序列号,以存储在数据库中。如果这些序列号只是数字,那就没问题了,但我碰到的序列号是字母数字,例如:

    56AAA71064D6和56AAA7105A25

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

    假设所有序列号都有某种顺序,那么如何解析其中的顺序部分呢?

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

    2 回复  |  直到 12 年前
        1
  •  0
  •   Akash Kava    14 年前

    如果序列号宽度相同,那么很容易…

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

        2
  •  0
  •   Steve Townsend    14 年前

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

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

    编辑:我的意思是,当一个新的字母数字序列号必须在数据库中注册时,您应该使用一个事务来完成此操作,该事务将一个记录原子地添加到原始(数字)序列号列表中,并在新表中添加第二个记录,该记录将数字值与字母数字值相关联。如果这不是原子的,那么方案就崩溃了。清除也必须原子处理。