一种全局唯一SN码生成方法、电子设备和存储介质与流程

文档序号:29699222发布日期:2022-04-16 13:55阅读:1238来源:国知局
一种全局唯一SN码生成方法、电子设备和存储介质与流程
一种全局唯一sn码生成方法、电子设备和存储介质
技术领域
1.本发明涉及安全编码领域,具体涉及一种全局唯一sn码生成方法、电子设备和存储介质。


背景技术:

2.基于数据压缩技术高效批量生成海量sn码,海量规模下可以保证sn的唯一性和有效性。sn可以用极短的字符记录多个信息,保证sn可溯源,可验真伪,可防窜货,肉眼识别字符所属信息及其直观,如我们现有sn仅仅17位内含版本号、工厂、日期信息、流水号、子流水号、校验码,并且在此单个条件的sn容量可达千亿规模。
3.如果某制造商或者售卖商在某一产品销售达到一定量的时候,夸区域售卖或者不同渠道销售的产品如果被肆意窜货,产品的定价权将受到严重威胁,并且难以维持不同地区差异化销售的目标,可能会严重损害公司及消费者利益,采用“一码一货”的办法,可以将商品信息记录在库,消费者购买完商品之后,可以根据此码验证此产品的货源安全。
4.现如今市面上也有一些sn算法实现的sn码,但是几乎都有编码过长、记录信息有限、容量不足、易于伪造等问题。市场上亟需一种能够解决上述问题的sn算法。


技术实现要素:

5.本发明提供一种全局唯一sn码生成方法、电子设备和存储介质,能够解决现有的sn码的编码过长、记录信息有限、容量不足、易于伪造问题。本发明提供以下技术方案来解决上述技术问题:
6.一种全局唯一sn码生成方法,包括如下步骤:
7.获取产品信息,包括如下信息中的至少一种:工厂、品类、年月、日周、流水号、子流水号;
8.根据所述产品信息和预先设置的对照表映射得到sn实际值;
9.根据所述sn实际值生成对照值,再根据所述对照值进行奇偶校验得到sn校验位。
10.较佳地,获取产品信息之前还包括如下步骤:
11.利用redis的setnx命令配置分布式锁。
12.较佳地,根据所述产品信息和预先设置的对照表映射得到sn实际值的具体步骤如下:
13.为不同的产品信息根据编码进制和产品信息自定义权值和sn实际值的对照表;
14.根据所述产品信息中的权值映射生成sn实际值。
15.较佳地,根据所述产品信息和预先设置的对照表映射得到sn实际值的步骤之后还包括:为所述sn码设置一位版本号,每生成一个sn码版本号均执行加1操作。
16.较佳地,根据所述sn实际值生成对照值,再根据所述对照值进行奇偶校验得到sn校验位的具体步骤为:
17.将sn码所有位sn实际值与其所对应的权值乘积相加得到的值再做除模运算;
18.将得到的值根据预先配置的余码对照表获得对照值;
19.将sn码所有位sn实际值对应的权值均转换为二进制,得到所有转换为二进制的权值中1的个数的奇偶性;
20.根据所述个数的奇偶性与所述对照值的奇偶性是否相同确定sn码校验位。
21.较佳地,根据所述个数的奇偶性与所述对照值的奇偶性是否相同确定sn码校验位的具体步骤如下:如果奇偶性相同,则将所述对照值作为sn码校验位;如果奇偶性不同,则将所述对照值加1后取模得到的值作为sn码校验位。
22.本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述的全局唯一sn码生成方法。
23.本发明还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现上述的全局唯一sn码生成方法的步骤。
24.本发明的有益效果是:用户可以自己配置sn每一位权重、进制、余数码值、以及进制字符确逻辑上连续的sn流水号看起来毫无规律,校验位更是可以通过改变上面条件得出不同结果,确保公司sn码生成规则如果被破解,公司可以通过修改上述条件,改变sn码生成规律;有效的保障sn码的安全性、唯一性。可以轻易获得sn的海量容量、可以更加容易的管理海量sn。
附图说明
25.图1为全局唯一sn码生成方法流程图;
26.图2为生成sn实际值的具体步骤流程图;
27.图3为根据sn实际值生成校验位的具体步骤流程图。
具体实施方式
28.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
29.实施例1
30.本实施例提供一种全局唯一sn码生成方法,如图1所示,包括如下步骤:
31.s100、获取产品信息,包括如下信息中的至少一种:工厂、品类、年月、日周、流水号、子流水号;
32.s200、根据所述产品信息和预先设置的对照表映射得到sn实际值;预先设置的对照表的规则如下:
33.工厂:默认配置是2位16进制数,可以根据需要配置最高62进制,用于标识工厂信息;
34.品类:默认配置是2位16进制数,可以根据需要配置最高62进制,用于配置此sn码对应商品的品类信息;
35.年月:默认配置是2位16进制数,可以根据需要配置最高62进制,用于记录产品生
产年月,从01开始对应2020年1月,逐月加1,如2021年11月可以标识成’17’(2020年1月到2021年11月期间共有23个月,换算成16进制为hex17);
36.日周:两位10进制数,用于标识本产品生产的具体某一日或者某一周,这两位也可根据配置,由一位62进制数表示。当前,如果数值在1-31标识是当前月的日。41-45表是当前月的1-5周。
37.流水号:可根据配置改成不同进制,如配置进制n,数据容量在[(n-1)*(n^4+n^3+n^2+n^1+n^0)];
[0038]
子流水号:可根据配置改成不同进制,如配置进制n,数据容量在[(n-1)*(n^1+n^0)],和流水号一起构成但条件下的sn容量。如果流水号和子流水号都是62进制,数据容量可以达到数万亿规模。
[0039]
s300、根据所述sn实际值生成对照值,再根据所述对照值进行奇偶校验得到sn校验位;采用哈希思想,数组下标对应权值,数组内字符代表sn实际值,如:
[0040][0041][0042]
如果想把权值2转化为sn实际值,只需要取arr[2]=

c’;
[0043]
如果想把权值5转化为sn实际值,只需要取arr[5]=

f’。
[0044]
本实施例中,sn可能需要短期内生成数千万或者上亿个值,中间牵扯sn的生成,确保全局唯一、奇偶校验、落库等操作,导致单台服务器难以支撑,所以需要多机器协同生成,为了确保全局唯一,这就需要配备分布式锁,让某一sn流水段内在统一时刻只能有一台机器生成。获取产品信息之前还包括如下步骤:利用redis的setnx命令配置分布式锁;具体实现方式为:利用redis的setnx命令
[0045]
setnx命令(set if not exists)
[0046]
语法:
[0047]
setnx key value
[0048]
功能:
[0049]
当且仅当key不存在,将key的值设为value,并返回1;若给定的key已经存在,则setnx不做任何动作,并返回0。
[0050]
本实施例中,如图2所示,将所述产品信息自定义的权值映射生成sn实际值的具体步骤如下:
[0051]
s210、为不同的产品信息根据编码进制和产品信息自定义权值和sn实际值的对照表;
[0052]
s220、根据所述产品信息中的权值映射生成sn实际值。
[0053]
本实施例中,权值对应sn实际值
[0054][0055]
此时生成一个权值流水号:0123456789
[0056]
对应的sn实际值是:abcdefg321,根据权值查表即可映射生成sn实际值。若想把权
值2转化为sn实际值,只需要取arr[2]=

c’;若想把权值5转化为sn实际值,只需要取arr[5]=

f’。
[0057]
本实施例中,将所述产品信息自定义的权值映射生成sn实际值的步骤之后还包括:为所述sn码设置一位版本号,每生成一个sn码版本号均执行加1操作。如此操作,后面16位由于字符权值的调整出现和先前生成的sn值相同的情况下,也能依托版本号确保全局唯一。如果上述对照表重新调整对应关系为:
[0058][0059]
此时生成一个权值流水号:9876543210
[0060]
对应的sn实际值是:abcdefg321
[0061]
不难看到,权值0123456789和权值9876543210不相同,但是他们两个对应的sn实际值都是abcdefg321,这样就造成的sn的重复问题,为了解决这一问题,在sn码中加入版本号位,由于两次的版本号不相同,进而确保唯一。
[0062]
本实施例通过分工厂、品类、年月、日周生成,对工厂、物料品类进行编码、确保不同工厂的工厂位的值不相同,不同品类的物料,品类位值不相同,不同日期生成的sn年月、日周不相同。落库时sn码作为主键,如果出现重复,则会落库失败、作为主键还将有更优异的查询速度、方便分库分表管理。
[0063]
本实施例中,如图3所示,根据所述sn实际值生成校验位的具体步骤为:
[0064]
s310、将sn码所有位sn实际值与其所对应的权值乘积相加得到的值再做除模运算;
[0065]
s320、将得到的值根据预先配置的余码对照表获得对照值;
[0066]
s330、将sn码所有位sn实际值对应的权值均转换为二进制,得到所有转换为二进制的权值中1的个数的奇偶性;
[0067]
s340、根据所述个数的奇偶性与所述对照值的奇偶性是否相同确定sn码校验位。
[0068]
本实施例中,校验码默认配置是1位13进制数,后面可以根据需要配置最高62进制。生成规则:对除了校验码本身这一位,其他16位每一位都乘以自己位的权值(可自由配置),然后这16位的乘机相加除模得到一个13进制数,然后根据这个13进制数取余码对照表(可自由配置)中拿到余码对照结果。奇偶校验:对除了校验码本身这一位,其他16位进行奇偶运算,然后和校验码对比,如果奇偶运算结果和校验码的奇偶不一致,则本校验位需要加一,然后对13取模。如生成的sn为:123456;
[0069]
对应位权值表为:987654;
[0070]
采用的校验位进制为:13;
[0071]
则乘积累加取模后的值:(1*9+2*8+3*7+4*6+5*5+6*4)%13=4;采用的余码对照表为
[0072][0073]
此时校验位的值时sn实际值4对应的对照值d;
[0074]
此时sn码为:123456d
[0075]
将sn码每一位转化为权值:987654,对应的二进制1个数的奇偶性可以简化为权值为奇数的个数的奇偶性:9/7/5三个奇数,可知,二进制1个数的奇偶性为奇,而对照值的奇偶性也为奇,则对照值d作为校验位的sn实际值。如果两者奇偶性不同,则校验位加一然后对校验位进制数取模。
[0076]
实施列2
[0077]
一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现实施例1中的全局唯一sn码生成方法。
[0078]
本发明实施例3仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0079]
电子设备可以以通用计算设备的形式表现,例如其可以为服务器设备。电子设备的组件可以包括但不限于:至少一个处理器、至少一个存储器、连接不同系统组件(包括存储器和处理器)的总线。
[0080]
总线包括数据总线、地址总线和控制总线。
[0081]
存储器可以包括易失性存储器,例如随机存取存储器(ram)和/或高速缓存存储器,还可以进一步包括只读存储器(rom)。
[0082]
存储器还可以包括具有一组(至少一个)程序模块的程序工具,这样的程序模块包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
[0083]
处理器通过运行存储在存储器中的计算机程序,从而执行各种功能应用以及数据处理。
[0084]
电子设备也可以与一个或多个外部设备(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(i/o)接口进行。并且,电子设备还可以通过网络适配器与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。网络适配器通过总线与电子设备的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、raid(磁盘阵列)系统、磁带驱动器以及数据备份存储系统等。
[0085]
应当注意,尽管在上文详细描述中提及了电子设备的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本技术的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
[0086]
实施列3
[0087]
一种计算机可读存储介质,所述可读存储介质存储有计算机程序,所述程序被处理器执行时实现实施例1中的全局唯一sn码生成方法的步骤。
[0088]
其中,可读存储介质可以采用的更具体可以包括但不限于:便携式盘、硬盘、随机存取存储器、只读存储器、可擦拭可编程只读存储器、光存储器件、磁存储器件或上述的任意合适的组合。
[0089]
在可能的实施方式中,本发明还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行实现实
施例1中所述的全局唯一sn码生成方法的步骤。
[0090]
其中,可以以一种或多种程序设计语言的任意组合来编写用于执行本发明的程序代码,所述程序代码可以完全地在用户设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户设备上部分在远程设备上执行或完全在远程设备上执行。
[0091]
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1