System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种自定义n进制的订单号生成的方法及系统技术方案_技高网

一种自定义n进制的订单号生成的方法及系统技术方案

技术编号:41242568 阅读:5 留言:0更新日期:2024-05-09 23:54
本发明专利技术提供了一种自定义n进制的订单号生成的方法,所述方法为:随机生成0‑35数字对应的字符串,字符串包含A‑Z,0‑9这些字符,生成一份映射关系字典charMap,使用自定义36进制算法,将订单id对数字36取模即id%36得到数字k,得到对应映射字符后将id除以36即id/36继续下轮计算,循环此步骤将id转化成20字符长度的订单号;循环遍历订单号中的每一位字符,得到字符对应的映射数值num,将当前累计和乘以36再加上k即(id*36+num),继续循环此步骤累计求和得到最终的订单idNo,节省了订单号字符串的存储空间。

【技术实现步骤摘要】

本专利技术涉及支付系统,特别是一种自定义n进制的订单号生成的方法及系统


技术介绍

1、在支付系统领域,经常会通过一个唯一的订单号来标识订单,订单号通常由字母和数字组成一个数十乃至几十位的长字符串,把这个长字符串存储在订单表的订单号字段,并且加上数据库唯一索引以便于快速检索。这种常规设计在普通常见下劣势不明显,但放到海量订单的大数据场景下,劣势就会被放大。首先,数据表的自增主键id相比用订单号作为唯一索引检索效率更高,其次,使用主键id进行数据检索还免去了唯一订单号生成的重复性校验问题,再次,20个字符长度的订单号需要额外占用20字节的存储空间,如果海量订单达到几十亿,上百亿,长年累月将会额外耗费相当大的存储成本。


技术实现思路

1、为克服上述问题,本专利技术的目的是提供一种自定义n进制的订单号生成的方法,能够使id和订单号通过算法快速转换,节省了订单号字符串的存储空间。

2、本专利技术采用以下方案实现:一种自定义n进制的订单号生成的方法,所述方法包括如下步骤:步骤s1、建立一映射关系字典charmap,所述映射关系字典charmap中的每个元素由key和value组成,将0到35的整数作为key值,将字母a-z和数字0-9作为value值,key值和value值随机打乱形成固定的对应关系;

3、步骤s2、使用订单表生成的主键id对数字36取模即id%36得到数字k,将数字k作为key值从映射关系字典取到对应value值放置待生成订单号最左边,将主键id除以36即id/36得到的商,将商作为新的主键id,循环上述操作直到处理完所有位,不足20长度的位置补上key=0对应的映射字符,最后得到一个20长度的字符串作为订单号;

4、步骤s3、当用订单号查询订单表数据时,循环遍历订单号字符串中的每一位字符,将每一位字符作为key值从映射关系字典获取当前字符对应的映射数值num,将当前累计和乘以36再加上num即sum*36+num,继续循环上述操作累计求和得到最终的订单idno,用订单idno查询订单表得到订单数据。

5、进一步的,所述步骤s2具体为:当订单表新增一条新订单数据时会得到新订单数据的主键id,使用订单表生成的主键id对数字36取模即id%36得到数字k,将数字k作为key值从映射关系字典取到对应value值填充到订单号字节数组的最左边的得到orderno,将主键id除以36即id/36得到的商,将商作为新的主键id,再次使用模运算对新的主键id进行数字36取模,得到数字,将该数字作为key值从映射关系字典取到对应value值填充到订单号字节数组的最左边,重复以上步骤,直到将所有位的字符填充到订单号字节数组中;不足20位的均以key=0对应在映射关系字典charmap中的字符进行填充,最后得到一个20长度的字符串作为订单号;这个订单号将返回给业务充当订单的唯一标识。

6、进一步的,所述步骤s3具体为:创建一个初始值为0的整数变量sum,当用订单号查询订单表数据时,使用一个循环来遍历订单号字符串中的每一位字符,即将第一位字符作为key值从映射关系字典获取当前字符对应的映射数值num,即第一个累计和为0,sum=0*36+num;然后对订单号字符串中的第二位字符进行操作,将当前累计和乘以36再加上num即sum*36+num,继续循环上述操作累计求和得到最终的订单idno,用订单idno查询订单表得到订单数据。

7、本专利技术还提供了一种自定义n进制的订单号生成的系统,所述系统包括:映射表建立模块、订单号生成模块、订单数据查询模块;

8、所述映射表建立模块,建立一映射关系字典charmap,所述映射关系字典charmap中的每个元素由key和value组成,将0到35的整数作为key值,将字母a-z和数字0-9作为value值,key值和value值随机打乱形成固定的对应关系;

9、所述订单号生成模块,使用订单表生成的主键id对数字36取模即id%36得到数字k,将数字k作为key值从映射关系字典取到对应value值放置待生成订单号最左边,将主键id除以36即id/36得到的商,将商作为新的主键id,循环上述操作直到处理完所有位,不足20长度的位置补上key=0对应的映射字符,最后得到一个20长度的字符串作为订单号;

10、所述订单数据查询模块,用订单号查询订单表数据时,循环遍历订单号字符串中的每一位字符,将每一位字符作为key值从映射关系字典获取当前字符对应的映射数值num,将当前累计和乘以36再加上num即sum*36+num,继续循环上述操作累计求和得到最终的订单idno,用订单idno查询订单表得到订单数据。

11、进一步的,所述订单号生成模块的实现方式具体为:当订单表新增一条新订单数据时会得到新订单数据的主键id,使用订单表生成的主键id对数字36取模即id%36得到数字k,将数字k作为key值从映射关系字典取到对应value值填充到订单号字节数组的最左边的得到orderno,将主键id除以36即id/36得到的商,将商作为新的主键id,再次使用模运算对新的主键id进行数字36取模,得到数字,将该数字作为key值从映射关系字典取到对应value值填充到订单号字节数组的最左边,重复以上步骤,直到将所有位的字符填充到订单号字节数组中;不足20位的均以key=0对应在映射关系字典charmap中的字符进行填充,最后得到一个20长度的字符串作为订单号;这个订单号将返回给业务充当订单的唯一标识。

12、进一步的,所述订单数据查询模块的实现方式具体为:创建一个初始值为0的整数变量sum,当用订单号查询订单表数据时,使用一个循环来遍历订单号字符串中的每一位字符,即将第一位字符作为key值从映射关系字典获取当前字符对应的映射数值num,即第一个累计和为0,sum=0*36+num;然后对订单号字符串中的第二位字符进行操作,将当前累计和乘以36再加上num即sum*36+num,继续循环上述操作累计求和得到最终的订单idno,用订单idno查询订单表得到订单数据。

13、本专利技术的有益效果在于:能够使id和订单号通过算法快速转换,在用户无法通过订单号直观的看出订单id的优点上,还节省了订单号字符串的存储空间。

本文档来自技高网...

【技术保护点】

1.一种自定义n进制的订单号生成的方法,其特征在于:所述方法包括如下步骤:

2.根据权利要求1所述的一种自定义n进制的订单号生成的方法,其特征在于:所述步骤S2具体为:当订单表新增一条新订单数据时会得到新订单数据的主键id,使用订单表生成的主键id对数字36取模即id%36得到数字k,将数字k作为key值从映射关系字典取到对应value值填充到订单号字节数组的最左边的得到orderno,将主键id除以36即id/36得到的商,将商作为新的主键id,再次使用模运算对新的主键id进行数字36取模,得到数字,将该数字作为key值从映射关系字典取到对应value值填充到订单号字节数组的最左边,重复以上步骤,直到将所有位的字符填充到订单号字节数组中;不足20位的均以key=0对应在映射关系字典charMap中的字符进行填充,最后得到一个20长度的字符串作为订单号;这个订单号将返回给业务充当订单的唯一标识。

3.根据权利要求1所述的一种自定义n进制的订单号生成的方法,其特征在于:所述步骤S3具体为:创建一个初始值为0的整数变量sum,当用订单号查询订单表数据时,使用一个循环来遍历订单号字符串中的每一位字符,即将第一位字符作为key值从映射关系字典获取当前字符对应的映射数值num,即第一个累计和为0,sum=0*36+num;然后对订单号字符串中的第二位字符进行操作,将当前累计和乘以36再加上num即sum*36+num,继续循环上述操作累计求和得到最终的订单idNo,用订单idNo查询订单表得到订单数据。

4.一种自定义n进制的订单号生成的系统,其特征在于:所述系统包括:映射表建立模块、订单号生成模块、订单数据查询模块;

5.根据权利要求4所述的一种自定义n进制的订单号生成的系统,其特征在于:所述订单号生成模块的实现方式具体为:当订单表新增一条新订单数据时会得到新订单数据的主键id,使用订单表生成的主键id对数字36取模即id%36得到数字k,将数字k作为key值从映射关系字典取到对应value值填充到订单号字节数组的最左边的得到orderno,将主键id除以36即id/36得到的商,将商作为新的主键id,再次使用模运算对新的主键id进行数字36取模,得到数字,将该数字作为key值从映射关系字典取到对应value值填充到订单号字节数组的最左边,重复以上步骤,直到将所有位的字符填充到订单号字节数组中;不足20位的均以key=0对应在映射关系字典charMap中的字符进行填充,最后得到一个20长度的字符串作为订单号;这个订单号将返回给业务充当订单的唯一标识。

6.根据权利要求4所述的一种自定义n进制的订单号生成的系统,其特征在于:所述订单数据查询模块的实现方式具体为:创建一个初始值为0的整数变量sum,当用订单号查询订单表数据时,使用一个循环来遍历订单号字符串中的每一位字符,即将第一位字符作为key值从映射关系字典获取当前字符对应的映射数值num,即第一个累计和为0,sum=0*36+num;然后对订单号字符串中的第二位字符进行操作,将当前累计和乘以36再加上num即sum*36+num,继续循环上述操作累计求和得到最终的订单idNo,用订单idNo查询订单表得到订单数据。

...

【技术特征摘要】

1.一种自定义n进制的订单号生成的方法,其特征在于:所述方法包括如下步骤:

2.根据权利要求1所述的一种自定义n进制的订单号生成的方法,其特征在于:所述步骤s2具体为:当订单表新增一条新订单数据时会得到新订单数据的主键id,使用订单表生成的主键id对数字36取模即id%36得到数字k,将数字k作为key值从映射关系字典取到对应value值填充到订单号字节数组的最左边的得到orderno,将主键id除以36即id/36得到的商,将商作为新的主键id,再次使用模运算对新的主键id进行数字36取模,得到数字,将该数字作为key值从映射关系字典取到对应value值填充到订单号字节数组的最左边,重复以上步骤,直到将所有位的字符填充到订单号字节数组中;不足20位的均以key=0对应在映射关系字典charmap中的字符进行填充,最后得到一个20长度的字符串作为订单号;这个订单号将返回给业务充当订单的唯一标识。

3.根据权利要求1所述的一种自定义n进制的订单号生成的方法,其特征在于:所述步骤s3具体为:创建一个初始值为0的整数变量sum,当用订单号查询订单表数据时,使用一个循环来遍历订单号字符串中的每一位字符,即将第一位字符作为key值从映射关系字典获取当前字符对应的映射数值num,即第一个累计和为0,sum=0*36+num;然后对订单号字符串中的第二位字符进行操作,将当前累计和乘以36再加上num即sum*36+num,继续循环上述操作累计求和得到最终的订单idno,用订单idno查询订单表得到订单数据。

4.一种自定义n进制的订单号生成...

【专利技术属性】
技术研发人员:刘德建叶伟李佳
申请(专利权)人:福建天晴数码有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1