java中自动生成有规律的编号

java中自动生成有规律的编号,第1张

public class Main {

private static long n = 1

public static void main(String[] args) {

System.out.println(test(n))

System.out.println(test(n))

}

public static long test(long l) {

String str = new SimpleDateFormat("yyyyMM")

.format(new java.util.Date())

long m = Long.parseLong((str)) * 10000

long ret = m + l

n = l + 1

return ret

}

}

比如你把你的数据都存在数据库里。

把你们这字符串分为两部分,前面取系统日期(在数据库中的字段为date),后面做一个整型变量(times)。

然后系统日期取出来后,搜索数据库date字段,如果找到了相同相同日期的数据了,就取times字段里最高的数据然后自动加1,如果没找到相同的date字段,就设置为001。

显示输出的时候只要把两个字段的数据转为字符串,整理合并下就可以了。

private  string GenerateStr()

      {

          //获取当前序列号,此处我存储在了配置文件中,实际应用中应该写入数据库或者文本文件中

          var currentNumber = ConfigurationManager.AppSettings["number"]

          if (string.IsNullOrEmpty(currentNumber))//为空,根据当前年月生成一个

          {

              var yearMonth = DateTime.Now.Date.ToString("yyyyMM")

              var number = yearMonth + "0001"

              ConfigurationManager.AppSettings["number"] = number

              return number

          }

          //不为空的话截取年月部分与当前年月比较

          var yearMonthPart = currentNumber.Substring(0, 6)

          var dtNow = DateTime.Now.Date.ToString("yyyyMM")

          if (!yearMonthPart.Equals(dtNow))//如果年月不相同,重新生成

          {

              var number = dtNow + "0001"

              ConfigurationManager.AppSettings["number"] = number

              return number

          }

          //若年月相同,则根据后面四位序列号+1生成新的序列号

          var num = currentNumber.Substring(6, currentNumber.Length - 6)

          var nextNum = GetIndex(num)

          var result = yearMonthPart + nextNum

          ConfigurationManager.AppSettings["number"] = result

          return result

      }

      private  string GetIndex(string num)

      {

          var nextNum = ""

          for (int i = 0i <num.Lengthi++)

          {

              if (num[i] != '0')

              {

                  var number = num.Substring(i, num.Length - i)

                  nextNum = (int.Parse(number) + 1).ToString()

                  var zeroLength = num.Length - nextNum.Length

                  for (int j = 0j <zeroLengthj++)

                  {

                      nextNum = "0" + nextNum

                  }

                  return nextNum

              }

          }

          return nextNum

      }

测试成功,


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10820401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存