今天在CSDN上逛的时候,我突然看到一个提问帖子

问一个大家一个问题
一个字符串 加1 谁做过
例如KA001A001
下一个就是 KA001A002
到 KA001Z999
就 KA002A001

这顿时引起了我的兴趣。流水号(Serial Number)在程序中应用很普遍,生成规则也各不相同。(比如,我们公司的会员卡卡号规则里面就有一个“卡号遇4跳过”的选项。)我上Google简单搜了一下,发现都是硬编码的函数,虽然它们能解决具体的问题,但不够通用灵活,换个应用场景又需要重写代码。那有没有一种简单、通用又灵活的流水号生成器呢?今天就让我们一起来试试。

流水号一般都是固定长度,由几部分组合而成:

  • 日期(如:20090101)
  • 常量代码(如:KA)
  • 数字序列(如:0001-9999)
  • 字母序列(如:A-Z)
  • 特殊字符(如:-)

简单分析之后,我们先定义一个接口(Delphi):

ISerialNumberGenerator接口主要有两个作用(职责):
  1. 生成下一个可用的流水号(NextSerialNumber)
  2. 验证某个流水号是否合法(Validate)

OK,接下来我们先列个简单的任务列表:

任务列表

  1. 支持可循环的数字序列('001’-'999’)
  2. 支持可循环的字母序列('A’-'Z’)
  3. 支持常量代码('KA’)
  4. 支持字母序列和数字序列组合(KA001A001)

 再写一个简单的测试用例(Test Case):

任务列表
  1. 支持可循环的数字序列('001’-'999’)
  2. 支持可循环的字母序列('A’-'Z’)
  3. 支持常量代码('KA’)
  4. 支持字母序列和数字序列组合(KA001A001)

接下来我们分别实现字母序列和常量代码流水号:

任务列表
  1. 支持可循环的数字序列('001’-'999’)
  2. 支持可循环的字母序列('A’-'Z’)
  3. 支持常量代码('KA’)
  4. 支持字母序列和数字序列组合(KA001A001)

任务列表
  1. 支持可循环的数字序列('001’-'999’)
  2. 支持可循环的字母序列('A’-'Z’)
  3. 支持常量代码('KA’)
  4. 支持字母序列和数字序列组合(KA001A001)

呵呵,到了高潮部分了,我们先写一段测试案例来测试组合流水号:

相关文章:

  • 2022-01-22
  • 2022-01-04
猜你喜欢
  • 2022-12-23
  • 2021-10-29
  • 2021-12-22
  • 2021-12-25
  • 2021-04-20
  • 2021-12-03
相关资源
相似解决方案