掌桥专利:专业的专利平台
掌桥专利
首页

随机数生成方法、装置和设备

文献发布时间:2023-06-19 11:05:16


随机数生成方法、装置和设备

技术领域

本申请涉及随机数生成技术领域,特别涉及一种随机数生成方法、装置和设备。

背景技术

在半自动粉面机等电子设备与上位机通信过程中,为确保通信唯一性和准确性,例如,要求通信报文中包含长度为2个字节的16进制的随机数(或伪随机数)等。

目前,在可编程逻辑控制器(PLC)中,并没有生成随机数的指令或功能。如图1P所示,现有的随机数生成方法,在PLC内嵌的C语言环境下运行rand()函数,利用C语言中的rand()函数生成一个位于0~RAND_MAX(RAND_MAX大于等于32767)之间的整数,以该整数作为基准,生成随机数。然而,当PLC开机后,现有的随机数生成方法经多次运算生成的随机数会逐渐相同,无法确保通信唯一性和准确性。

发明内容

本申请提供了一种随机数生成方法、装置和设备,能够避免多次生成的随机数逐渐相同的情况发生,有利于确保通信唯一性和准确性。

第一方面,本申请提供了一种随机数生成方法,包括:

响应于随机数生成指令,生成随机数;

所述生成随机数包括:

获取当前时刻,根据所述当前时刻,确定出基数;

从所述基数中选取得到数字序列,基于所述数字序列确定随机数,其中,所述数字序列在所述基数中的位置与随机数的生成次数之间具有映射关系。

其中一种可能的实现方式中,所述从所述基数中选取得到数字序列,包括:

按照第一位置以及当前随机数的生成次数,确定出第二位置,其中,所述第一位置指的是在前n次生成随机数的过程中,第一数字序列在第一基数中的位置;

从第二基数中的第二位置上选取得到第二数字序列。

其中一种可能的实现方式中,所述第一位置包括第一序列开始选取位置,所述方法还包括:

在所述前n次生成随机数的过程中,从第一基数中的第一序列开始选取位置开始,沿预设选取方向,选取得到预设第一长度的第一数字序列。

其中一种可能的实现方式中,所述第二位置包括第二序列开始选取位置,所述按照第一位置以及当前随机数的生成次数,确定出第二位置,包括:

以预设第二长度为移动步长,将所述第一序列开始选取位置沿预设移动方向移动,确定出第二序列开始选取位置;

所述从第二基数中的第二位置上选取得到第二数字序列,包括:

从第二基数中的所述第二序列开始选取位置开始,沿所述预设选取方向,选取得到所述预设第一长度的第二数字序列。

其中一种可能的实现方式中,在所述从所述第二基数中的第二位置上选取得到所述第二数字序列之后,所述方法还包括:

判断所述第二数字序列的长度是否小于预设第一长度;

若所述第二数字序列的长度小于所述预设第一长度,则基于所述第二数字序列的长度与所述预设第一长度的长度差,将所述第二数字序列的长度补充至所述预设第一长度。

其中一种可能的实现方式中,所述基于所述第二数字序列的长度与所述预设第一长度的长度差,将所述第二数字序列的长度补充至所述预设第一长度,包括:

获取与所述长度差相等长度的零序列;

在所述第二数字序列中添加所述零序列,使得所述第二数字序列的长度等于所述预设第一长度。

其中一种可能的实现方式中,在所述从所述第二基数中的第二位置上选取得到所述第二数字序列之后,所述方法还包括:

判断所述第二数字序列是否等于所述预设第一长度的零序列;

若所述第二数字序列等于所述预设第一长度的零序列,则从所述第二基数中的预设初始选取位置上选取得到所述预设第一长度的第三数字序列,基于所述第三数字序列确定随机数。

其中一种可能的实现方式中,在所述从所述第二基数中的第二位置上选取得到所述第二数字序列之后,所述方法还包括:

在存在相同数字序列的情况下,将所述第二位置沿预设移动方向,按照预设第二长度移动,获得第三位置;

从所述第二基数中的第三位置上选取得到第四数字序列,基于所述第四数字序列确定随机数。

其中一种可能的实现方式中,所述获取当前时刻,根据所述当前时刻,确定出基数,包括:

基于预设素数对所述当前时刻进行增大运算,获得增大数;

对所述增大数进行进制转换,获得所述基数。

第二方面,本申请提供了一种随机数生成装置,包括:

随机数生成模块,用于响应于随机数生成指令,生成随机数,其中,所述随机数生成指令中包含随机数的生成次数;

所述随机数生成模块包括:

基数获取模块,用于获取当前时刻,根据所述当前时刻,确定出基数;

数字序列选取模块,用于从所述基数中选取得到数字序列,基于所述数字序列确定随机数,其中,所述数字序列在所述基数中的位置与随机数的生成次数之间具有映射关系。

第三方面,本申请提供了一种电子设备,包括:

一个或多个处理器;存储器;以及一个或多个计算机程序,其中所述一个或多个计算机程序被存储在所述存储器中,所述一个或多个计算机程序包括指令,当所述指令被所述设备执行时,使得所述设备执行如第一方面所述的方法。

第四方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行如第一方面所述的方法。

第五方面,本申请提供一种计算机程序,当所述计算机程序被计算机执行时,用于执行第一方面所述的方法。

在一种可能的设计中,第五方面中的程序可以全部或者部分存储在与处理器封装在一起的存储介质上,也可以部分或者全部存储在不与处理器封装在一起的存储器上。

附图说明

图1P为现有技术随机数生成方法的流程示意图;

图1为本申请随机数生成方法一个实施例的方法示意图;

图2为本申请随机数生成方法一个实施例的流程示意图;

图3为本申请随机数生成装置一个实施例的结构示意图;

图4为本申请电子设备一个实施例的结构示意图。

具体实施方式

本申请的实施方式部分使用的术语仅用于对本申请的具体实施例进行解释,而非旨在限定本申请。

如图1P所示,现有的随机数生成方法,在PLC内嵌的C语言环境下运行rand()函数,利用C语言中的rand()函数生成一个位于0~RAND_MAX(RAND_MAX大于等于32767)之间的整数,以该整数作为基准,生成随机数。然而,当PLC开机后,现有的随机数生成方法经多次运算生成的随机数会逐渐相同,无法确保通信唯一性和准确性。

本申请人发现,在现有的随机数生成方法中,根据一个称为“种子”的数作为基准以递推公式推算出来一个系数,当该系数很大时,就会符合正态分布,从而相当于生成了随机数。然而,当PLC开机时,该“种子”为固定值,根据该固定值多次运算后生成的随机数会趋于收敛,使得随机数逐渐相同,从而影响通信唯一性和准确性。

为此,本申请提出一种随机数生成方法、装置和设备,能够避免多次生成的随机数逐渐相同的情况发生,有利于确保通信唯一性和准确性。

图1为本申请随机数生成方法一个实施例的方法示意图。如图1和图2所示,上述随机数生成方法可以包括:

S101、响应于随机数生成指令,生成随机数;

在本实施例中,所述随机数生成方法可以应用于电子设备,例如,餐饮设备如半自动粉面机等、终端设备如手机、电话、电脑、智能手表等、智能汽车、智能机器人、无人机、智能家居等。该电子设备可以与上位机通信连接,在电子设备与上位机之间传输的通信报文中可以包含随机数,该随机数可以由本实施例提供的随机数生成方法获得,以确保通信唯一性和准确性。

可以理解的是,所述随机数生成指令中可以包含通信所需的随机数的数量,或生成随机数的次数,使得所述电子设备可以根据所述随机数生成指令,生成一个或多个随机数。例如,在一次通信过程中,所述电子设备接收到的随机数生成指令中包含生成N个随机数,则所述电子设备响应于该随机数生成指令,生成N个随机数,以满足通信需求。

具体地,在步骤S101中,所述生成随机数可以包括:

S102、获取当前时刻,根据所述当前时刻,确定出基数。

优选地,所述当前时刻可以包括当前时间的年、月、星期、日、时、分、秒等。举例地,该电子设备可以包括寄存器,该寄存器用于记录当前时间,例如,寄存器SD13用于记录当前秒,寄存器SD14用于记录当前分,寄存器SD15用于记录当前时,寄存器SD16用于记录当前日,寄存器SD17用于记录当前月,寄存器SD18用于记录当前年,寄存器SD19用于记录当前星期。

相应地,在步骤S102中,可以通过读取寄存器SD13获得当前秒,读取寄存器SD14获得当前分,读取寄存器SD15获得当前时,读取寄存器SD16获得当前日,读取寄存器SD17获得当前月,读取寄存器SD18获得当前年,读取寄存器SD19获得当前星期。

可以理解的是,所述当前时刻可以包括电子设备与上位机之间每5秒进行一次心跳交互的时刻,因此,随着时间的变化,获得的所述当前时刻不同,根据所述当前时刻,获得的基数也不同,非固定值。进一步地,不同的所述基数可以分别用于确定出不同的随机数,从而避免多次生成的随机数逐渐相同的情况发生,有利于确保通信唯一性和准确性。

由于相邻的所述当前时刻之间的时间间隔较短,为使不同的所述基数之间的数值差异较为明显,避免数值排列重复,提高所述基数的复杂性。在本实施例中,步骤S102中,可以对当前时刻进行复杂性处理,以得到数值足够大的基数。

其中一种可能的实现方式中,步骤S102,可以包括:

S201、基于预设素数对所述当前时刻进行增大运算,获得增大数;

S202、对所述增大数进行进制转换,获得所述基数。

优选地,步骤S201中,所述当前时刻可以被转换为秒数,例如,所述当前时刻为2020年11月10日,星期二,14:14:31。所述当前时刻转换为秒数为second=51271,根据所述当前时刻中的年、月、日以及星期对所述秒数进行运算,得到运算结果num1,以供得到较大的数值。例如,将年与月相加得到一个和,把得到的和与当前日、当前星期相乘得到一个乘积,再将乘积与秒数相加得到运算结果num1,即运算结果num1=(2020+11)*10*2+51271=91891。

进一步地,该运算结果与所述预设素数相乘,得到所述增大数。然后,在步骤S202中将所述增大数进行进制转换,如转换为16进制等。例如,预设素数为2333,则增大数cal可以由以下公式计算得到,

cal=num2*2333=91891*2333=214,381,703D

=1100 1100 0111 0011 0100 1000 0111B=CC73487H

其中,所述基数为CC73487H。

可以理解的是,所述运算结果与素数相乘后得到的增大数,在数制转换中不会产生约分,有利于提高所述基数的复杂性,同时使得所述基数的数值增大,以及所述基数的数字序列的长度增加。

S103、从所述基数中选取得到数字序列,基于所述数字序列确定随机数,其中,所述数字序列在所述基数中的位置与随机数的生成次数之间具有映射关系。

也就是说,随着当前时刻的变化,在不同的当前时刻,获得到不同的所述基数(如第一基数、第二基数、第三基数…等),在不同的所述基数中的位置上选取得到不同的数字序列,基于不同的数字序列确定出不同的随机数,从而避免多次生成的随机数逐渐相同的情况发生,有利于确保通信唯一性和准确性。

可选地,所述映射关系可以是静态映射关系,所述基数中的位置可以包括预设固定位置,例如,所述固定位置可以包括所述基数的低16位。换句话说,所述静态映射关系可以指,在每次生成随机数的过程中,从不同的所述基数的预设固定位置(如低16位)上选取得到不同的数字序列。

优选地,所述映射关系可以是动态映射关系,所述动态映射关系是指在每次生成随机数的过程中,从不同的所述基数的不同位置上选取得到不同的数字序列。具体地,所述基数中的位置可以包括序列开始选取位置、序列结束选取位置、序列长度、位置选取方向(如向左或向右选取数字序列)以及位置选取的移动方向(如左移或右移)中的一种或多种参数,这些参数可以与随机数的生成次数之间具有动态的映射关系。

例如,所述动态映射关系可以指,在上一次生成随机数的过程中,从上一个基数(如第一基数)的第一序列开始选取位置(如右侧第n个数字位置)开始,沿预设位置选取方向(如向左)选取得到预设第一长度(如2个字节长度)的第一数字序列,然后,在下一次生成随机数的过程中,将上述第一序列开始选取位置沿预设位置选取的移动方向(如向左)移动预设第二长度(如半个字节长度,预设第二长度可以是移动步长),确定出第二序列开始选取位置(如右侧第n个数字位置+移动步长),从下一个基数(如第二基数)的第二序列开始选取位置开始,沿预设位置选取方向(如向左)选取得到预设第一长度(如2个字节长度)的第二数字序列。

举例地,在第一次(n=1)生成随机数的过程中,所述序列开始选取位置为右侧第一个数字位置,从基数的右侧第一个数字位置开始,向左选取得到预设第一长度(如2个字节长度)的数字序列,以生成第一随机数。在第二次(n=2)生成随机数的过程中,所述序列开始选取位置为将右侧第一个数字位置向左移动n-1个移动步长(移动步长为预设第二长度,如半个字节长度)后的位置(如右侧第二个数字位置),从基数的右侧第二个数字位置开始,向左选取得到2个字节长度的数字序列,以生成第二随机数…以此类推。因此,每生成一次随机数,所述序列开始选取位置沿预设移动方向(如向左移动)移动一次移动步长,并从基数中的移动后序列开始选取位置开始,沿预设选取方向(如向左),选取得到不同的数字序列,以生成不同的随机数。

其中一种可能的实现方式中,步骤S103,可以包括:

S301、按照第一位置以及当前随机数的生成次数,确定出第二位置,其中,所述第一位置指的是在前n次生成随机数的过程中,第一数字序列在第一基数中的位置;

S302、从第二基数中的第二位置上选取得到第二数字序列。

也就是说,从第一基数的第一位置上选取得到第一数字序列,以确定第一随机数,从第二基数的第二位置上选取得到第二数字序列,以确定第二随机数。

可以理解的是,所述第一位置可以包括第一序列开始选取位置和/或第一序列结束选取位置,所述第二位置可以包括第二序列开始选取位置和/或第二序列结束选取位置。

其中一种可能的实现方式中,所述方法还包括:

S303、在所述前n次生成随机数的过程中,从第一基数中的第一序列开始选取位置开始,沿预设选取方向,选取得到预设第一长度的第一数字序列。

优选地,所述预设第一长度为2个字节长度,所述第一数字序列为2个字节长度,所述预设选取方向为沿所述基数向左选取。

例如,所述第一序列开始选取位置为右侧第一个数字位置,所述第一数字序列result可以由以下公式计算得到,

result=1100 1100 0111 0011 0100 1000 0111B*1111 1111 1111 1111B

=CC73487H*0FFFFH=3487H

其中,第一数字序列为3487(H)。

其中一种可能的实现方式中,步骤S301,可以包括:

S401、以预设第二长度为移动步长,将所述第一序列开始选取位置沿预设移动方向移动,确定出第二序列开始选取位置。

其中一种可能的实现方式中,步骤S302,可以包括:

S402、从第二基数中的所述第二序列开始选取位置开始,沿所述预设选取方向,选取得到所述预设第一长度的第二数字序列。

举例地,在前n次生成随机数的过程中,所述第一序列开始选取位置为右侧第n个数字位置,从第一基数的右侧第n个数字位置开始,向左选取得到预设第一长度(如2个字节长度)的第一数字序列,以生成第一随机数。在步骤S401中,所述第二序列开始选取位置为将右侧第n个数字位置向左移动一个移动步长(移动步长为预设第二长度,如半个字节长度)后的位置(如右侧第n+1个数字位置)。在步骤S402中,从基数的右侧第n+1个数字位置开始,向左选取得到2个字节长度的第二数字序列,以生成第二随机数。

举例地,所述当前时刻可以包括第一时刻和第二时刻。

其中,所述第一时刻为2020年11月10日,星期二,14:14:31,获得第一数字序列可以包括以下步骤:

将第一时刻转换为秒数second=51271,将秒数second转换为运算结果call=91891,将运算结果cal1与预设素数相乘,得到第一增大数cal2=214381703(D),将第一增大数cal2转换为16进制cal2=CC73487(H),则第一基数为CC73487(H),从第一基数中的第一位置上选取得到第一数字序列3487(H)。

其中,所述第二时刻为2020年11月10日,星期二,14:14:36,获得第二数字序列可以包括以下步骤:

将第二时刻转换为秒数second,

second=14*3,600+14*60+36=51,276

将秒数second转换为运算结果cal1,

cal1=(2,020+11)*10*2+51,276=91,896

将运算结果cal1与预设素数相乘,得到第二增大数cal2,

cal2=91,896*2,333=214,393,368(D)

将第二增大数cal2转换为16进制,

cal2=214,393,368(D)=CC7 6218(H)

即得到第二基数CC76218(H),从第二基数的第二位置上选取得到第二数字序列为7621(H)

值得一提的是,步骤S101中,可以生成多个随机数。其中,在步骤S401中,以预设第二长度为移动步长,将所述第一序列开始选取位置沿预设移动方向移动,确定出多个第二序列开始选取位置。在步骤S402中,从第二基数中的每个所述第二序列开始选取位置开始,沿所述预设选取方向,选取得到多个所述预设第一长度的第二数字序列,以确定出多个随机数。

例如,对应于不同的时刻,可以得到多个不同的基数cal[0],基数cal[1],基数cal[2],...基数cal[n],分别从不同的基数中选取不同的数字序列result[0],数字序列result[1],数字序列result[2],...数字序列result[n]。具体公式如下,

result[0]=cal[0]*0xFFFF=N

result[0]=cal[0]*0xFFFF0=N

……

result[n]=N

其中,N

举例地,

当当前时刻为14:14:31时,所述第一数字序列result[0]可以由以下公式计算得到,

result[0]=CC7 3487(H)*0xFFFF=3487(H)

其中,第一基数cal[0]为CC76218(H),第一数字序列N

当当前时刻为14:14:36时,所述第二数字序列result[1]可以由以下公式计算得到,

result[1]=CC76218(H)*0xF FFF0=7621(H)

其中,第二基数cal[1]为CC76218(H),第二数字序列N

当当前时刻为14:14:41时,所述第二数字序列result[2]可以由以下公式计算得到,

result[2]=CC7 8FA9(H)*0xFF FF00=C78F(H)

其中,第二基数cal[2]为CC78FA9(H),第二数字序列N

当当前时刻为14:14:46时,所述第二数字序列result[3]可以由以下公式计算得到,

result[3]=CC7 BD3A(H)*0xFFF F000=CC7B(H)

其中,第二基数cal[3]为CC7BD3A(H),第二数字序列N

因此,本实施例提供的随机数生成方法中,基数根据时间的变化而变化,而不是固定值,而且,按照递进置位的方式从多个不同的基数中选取不同位置的数字序列,从而得到不同的随机数,每次输出的随机数可以以16进制的形式存入寄存器中缓存,以供电子设备每次通信时可以从寄存器中获取随机数作为通信报文的一部分,实现通信,因此,有利于避免多次生成的随机数逐渐相同的情况发生,确保了通信唯一性和准确性。

其中一种可能的实现方式中,在步骤S302之后,所述方法还包括:

S501、判断所述第二数字序列的长度是否小于所述预设第一长度;

S502、若所述第二数字序列的长度小于所述预设第一长度,则基于所述第二数字序列的长度与所述预设第一长度的长度差,将所述第二数字序列的长度补充至所述预设第一长度。

也就是说,由于第二基数的长度有限,当选取的第二数字序列的长度小于2个字节长度时,可以将第二数字序列的长度补充至2个字节长度。

举例地,当当前时刻为14:14:51时,所述第二基数result[4]为CC7EA3B(H),从第二基数中选取第二数字序列N

其中一种可能的实现方式中,步骤S502可以包括:

S601、获取与所述长度差相等长度的零序列;

S602、在所述第二数字序列中添加所述零序列,使得所述第二数字序列的长度等于所述预设第一长度。

优选地,可以在第二数字序列的右侧(或左侧)添加零序列。

例如,当当前时刻为14:14:51时,所述第二数字序列result[4]可以由以下公式计算得到,

result[4]=CC7 EA3B(H)*0xFFFF 0000=0x0CC7(H)

其中,第二基数cal[4]为CC7EA3B(H),零序列为0,第二数字序列N

当第二时刻为14:14:56时,所述第二数字序列result[5]可以由以下公式计算得到,

result[5]=CC8 185C(H)*0xF FFF0 0000=0x00CC(H)

其中,第二基数cal[5]为CC8185C(H),零序列为00,第二数字序列N

当第二时刻为14:15:01时,所述第二数字序列result[6]可以由以下公式计算得到,

result[6]=CC8 45ED(H)*0xFF FF00 0000=0x000C(H)

其中,第二基数cal[6]为CC845ED(H),零序列为000,第二数字序列N

其中一种可能的实现方式中,在步骤S602之后,所述方法还包括:

S603、判断所述第二数字序列是否等于所述预设第一长度的零序列;

S604、若所述第二数字序列等于所述预设第一长度的零序列,则从所述第二基数中的预设初始选取位置上选取得到所述预设第一长度的第三数字序列,基于所述第三数字序列确定随机数。

也就是说,当第二数字序列为2个字节长度的零序列时,为防止输出随机数相同,零序列不作为随机数进行输出。步骤S604中,从根据当前时刻获得的第二基数中预设初始选取位置(预设初始选取位置可以是上述第一序列开始选取位置,如右侧第一个数字等)开始,向左选取2个字节长度的第三数字序列,该第三数字序列作为随机数进行输出。可以理解的是,在后续生成随机数的过程中,从当前时刻获得的基数中选取得到数字序列的位置可以根据预设初始选取位置以及随机数生成次数确定,具体步骤或原理,可以参考上述步骤S301以及S302,在此不再赘述。

举例地,当当前时刻为14:15:06时,所述第二数字序列result[7]可以由以下公式计算得到,

result[7]=CC8 737E(H)*0xFFF F000 0000=0x0000(H)

其中,第二基数cal[7]为CC8737E(H),第二数字序列N

由于第二数字序列N

即第三数字序列result[8]由以下公式计算得到,

result[8]=CC8 737E(H)*0xFFFF=0x737E(H)

则第三数字序列result[8]作为第七次输出第二随机数,即第七次输出的随机数为737E(H)。

其中一种可能的实现方式中,在步骤S602之后,所述方法还包括:

S701、在存在相同数字序列的情况下,将所述第二位置沿预设移动方向,按照预设第二长度移动,获得第三位置;

S702、从所述第二基数中的第三位置上选取得到第四数字序列,基于所述第四数字序列确定随机数。

也就是说,若第二数字序列与第一数字序列相等,或多个第二数字序列之前相等,则当前获得的第二数字序列不作为随机数进行输出,以防止当前输出的随机数与之前输出的随机数相同,以确保通信唯一性和准确性。

举例地,若在某一时刻(如12:20:11),获得的第一基数为CC2345(H),选取的第一数字序列为2345,经5秒后,在当前时刻(即12:20:16),若获得的第二基数为CC23458(H),则选取的第二数字序列也为2345,因此,该第二数字序列2345不作为随机数进行输出。然后,再经5秒后,在时刻12:20:21,获得第三基数CC5782(H),则选取第四数字序列为CC57,则第四数字序列CC57作为随机数进行输出。

或者,在某一时刻(如13:20:11),获得的第二基数为CC45678(H),选取的第一数字序列为4567,经5秒后,在当前时刻(即13:20:16),若再次获得的第二基数为CC4567D8(H),则选取的当前第二数字序列也为4567,因此,与当前时刻对应的第二数字序列不作为随机数进行输出。

可以理解的是,若当前的第二数字序列与第一数字序列相等,或多个第二数字序列之间相等,则可以从所述第二基数中的第三位置(如从上述第二位置向左移动预设第三长度如半个字节或多个字节等)选取得到第四数字序列,以得到不重复的随机数,而无需从上述第三基数中进行选取。例如,当前的第二数字序列在所述第二基数中的第二位置为N

可以理解的是,上述实施例中的部分或全部步骤骤或操作仅是示例,本申请实施例还可以执行其它操作或者各种操作的变形。此外,各个步骤可以按照上述实施例呈现的不同的顺序来执行,并且有可能并非要执行上述实施例中的全部操作。

图3所示为本申请随机数生成装置100一个实施例的结构示意图。如图3所示,上述随机数生成装置可以包括:

随机数生成模块10,用于响应于随机数生成指令,生成随机数,其中,所述随机数生成指令中包含随机数的生成次数;

所述随机数生成模块10包括:

基数获取模块20,用于获取当前时刻,根据所述当前时刻,确定出基数;

数字序列选取模块30,用于从所述基数中选取得到数字序列,基于所述数字序列确定随机数,其中,所述数字序列在所述基数中的位置与随机数的生成次数之间具有映射关系。

其中一种可能的实现方式中,所述数字序列选取模块30,包括:

按照第一位置以及当前随机数的生成次数,确定出第二位置,其中,所述第一位置指的是在前n次生成随机数的过程中,第一数字序列在第一基数中的位置;

从第二基数中的第二位置上选取得到第二数字序列。

其中一种可能的实现方式中,所述第一位置包括第一序列开始选取位置,所述装置100还包括:

在所述前n次生成随机数的过程中,从第一基数中的第一序列开始选取位置开始,沿预设选取方向,选取得到预设第一长度的第一数字序列。

其中一种可能的实现方式中,所述第二位置包括第二序列开始选取位置,所述装置还包括:

以预设第二长度为移动步长,将所述第一序列开始选取位置沿预设移动方向移动,确定出第二序列开始选取位置;

所述从第二基数中的第二位置上选取得到第二数字序列,包括:

从第二基数中的所述第二序列开始选取位置开始,沿所述预设选取方向,选取得到所述预设第一长度的第二数字序列。

其中一种可能的实现方式中,所述装置还包括:

判断所述第二数字序列的长度是否小于预设第一长度;

若所述第二数字序列的长度小于所述预设第一长度,则基于所述第二数字序列的长度与所述预设第一长度的长度差,将所述第二数字序列的长度补充至所述预设第一长度。

其中一种可能的实现方式中,所述装置还包括:

获取与所述长度差相等长度的零序列;

在所述第二数字序列中添加所述零序列,使得所述第二数字序列的长度等于所述预设第一长度。

其中一种可能的实现方式中,所述装置还包括:

判断所述第二数字序列是否等于所述预设第一长度的零序列;

若所述第二数字序列等于所述预设第一长度的零序列,则从所述第二基数中的预设初始选取位置上选取得到所述预设第一长度的第三数字序列,基于所述第三数字序列确定随机数。

其中一种可能的实现方式中,所述装置还包括:

在存在相同数字序列的情况下,将所述第二位置沿预设移动方向,按照预设第二长度移动,获得第三位置;

从所述第二基数中的第三位置上选取得到第四数字序列,基于所述第四数字序列确定随机数。

其中一种可能的实现方式中,所述基数获取模块20,包括:

基于预设素数对所述当前时刻进行增大运算,获得增大数;

对所述增大数进行进制转换,获得所述基数。

可以理解的是,图3所示实施例提供的随机数生成装置可用于执行本申请图1所示方法实施例的技术方案,其实现原理和技术效果可以进一步参考方法实施例中的相关描述。

应理解以上图3的随机数生成装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块以软件通过处理元件调用的形式实现,部分模块通过硬件的形式实现。例如,数字序列选取模块可以为单独设立的处理元件,也可以集成在电子设备的某一个芯片中实现。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。

例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit;以下简称:ASIC),或,一个或多个微处理器(Digital Singnal Processor;以下简称:DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array;以下简称:FPGA)等。再如,这些模块可以集成在一起,以片上系统(System-On-a-Chip;以下简称:SOC)的形式实现。

图4为本申请电子设备一个实施例的结构示意图,如图4所示,上述电子设备可以包括:一个或多个处理器;存储器;以及一个或多个计算机程序。

其中,上述电子设备可以为餐饮设备如半自动粉面机等,移动终端(手机),收银设备,计算机,智慧屏,无人机,智能网联车(Intelligent Connected Vehicle;以下简称:ICV),智能(汽)车(smart/intelligent car)或车载设备等设备。

其中上述一个或多个计算机程序被存储在上述存储器中,上述一个或多个计算机程序包括指令,当上述指令被上述设备执行时,使得上述设备执行以下步骤:

响应于随机数生成指令,生成随机数,其中,所述随机数生成指令中包含随机数的生成次数;

所述生成随机数包括:

获取当前时刻,根据所述当前时刻,确定出基数;

从所述基数中选取得到数字序列,基于所述数字序列确定随机数,其中,所述数字序列在所述基数中的位置与随机数的生成次数之间具有映射关系。

其中一种可能的实现方式中,当上述指令被上述设备执行时,使得上述设备执行所述从所述基数中选取得到数字序列,包括:

按照第一位置以及当前随机数的生成次数,确定出第二位置,其中,所述第一位置指的是在前n次生成随机数的过程中,第一数字序列在第一基数中的位置;

从第二基数中的第二位置上选取得到第二数字序列。

其中一种可能的实现方式中,所述第一位置包括第一序列开始选取位置,当上述指令被上述设备执行时,使得上述设备还执行:

在所述前n次生成随机数的过程中,从第一基数中的第一序列开始选取位置开始,沿预设选取方向,选取得到预设第一长度的第一数字序列。

其中一种可能的实现方式中,所述第二位置包括第二序列开始选取位置,当上述指令被上述设备执行时,使得上述设备执行所述按照第一位置以及当前随机数的生成次数,确定出第二位置,包括:

以预设第二长度为移动步长,将所述第一序列开始选取位置沿预设移动方向移动,确定出第二序列开始选取位置;

所述从第二基数中的第二位置上选取得到第二数字序列,包括:

从第二基数中的所述第二序列开始选取位置开始,沿所述预设选取方向,选取得到所述预设第一长度的第二数字序列。

其中一种可能的实现方式中,当上述指令被上述设备执行时,使得上述设备执行在所述从所述第二基数中的第二位置上选取得到所述第二数字序列之后,所述设备还执行:

判断所述第二数字序列的长度是否小于预设第一长度;

若所述第二数字序列的长度小于所述预设第一长度,则基于所述第二数字序列的长度与所述预设第一长度的长度差,将所述第二数字序列的长度补充至所述预设第一长度。

其中一种可能的实现方式中,当上述指令被上述设备执行时,使得上述设备执行所述基于所述第二数字序列的长度与所述预设第一长度的长度差,将所述第二数字序列的长度补充至所述预设第一长度,包括:

获取与所述长度差相等长度的零序列;

在所述第二数字序列中添加所述零序列,使得所述第二数字序列的长度等于所述预设第一长度。

其中一种可能的实现方式中,当上述指令被上述设备执行时,使得上述设备执行在所述从所述第二基数中的第二位置上选取得到所述第二数字序列之后,所述设备还执行:

判断所述第二数字序列是否等于所述预设第一长度的零序列;

若所述第二数字序列等于所述预设第一长度的零序列,则从所述第二基数中的预设初始选取位置上选取得到所述预设第一长度的第三数字序列,基于所述第三数字序列确定随机数。

其中一种可能的实现方式中,当上述指令被上述设备执行时,使得上述设备执行在所述从所述第二基数中的第二位置上选取得到所述第二数字序列之后,所述设备还执行:

在存在相同数字序列的情况下,将所述第二位置沿预设移动方向,按照预设第二长度移动,获得第三位置;

从所述第二基数中的第三位置上选取得到第四数字序列,基于所述第四数字序列确定随机数。

其中一种可能的实现方式中,当上述指令被上述设备执行时,使得上述设备执行所述所述获取当前时刻,根据所述当前时刻,确定出基数,包括:

基于预设素数对所述当前时刻进行增大运算,获得增大数;

对所述增大数进行进制转换,获得所述基数。

图4所示的电子设备可以是终端设备也可以是内置于上述终端设备的电路设备。该设备可以用于执行本申请图1所示实施例提供的随机数生成方法中的功能/步骤。

如图4所示,电子设备900包括处理器910和存储器920。其中,处理器910和存储器920之间可以通过内部连接通路互相通信,传递控制和/或数据信号,该存储器920用于存储计算机程序,该处理器910用于从该存储器920中调用并运行该计算机程序。

上述存储器920可以是只读存储器(read-only memory,ROM)、可存储静态信息和指令的其它类型的静态存储设备、随机存取存储器(random access memory,RAM)或可存储信息和指令的其它类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compactdisc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备,或者还可以是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质等。

上述处理器910可以和存储器920可以合成一个处理装置,更常见的是彼此独立的部件,处理器910用于执行存储器920中存储的程序代码来实现上述功能。具体实现时,该存储器920也可以集成在处理器910中,或者,独立于处理器910。

除此之外,为了使得电子设备900的功能更加完善,该电子设备900还可以包括电源930、通信单元940等中的一个或多个。

所述处理器910可以包括可编程逻辑控制器(PLC),通过通信单元940与上位机进行通信。

可选地,电源930用于给电子设备中的各种器件或电路提供电源。

应理解,图4所示的电子设备900能够实现本申请图1所示实施例提供的方法的各个过程。电子设备900中的各个模块的操作和/或功能,分别为了实现上述方法实施例中的相应流程。具体可参见本申请图1所示方法实施例中的描述,为避免重复,此处适当省略详细描述。

应理解,图4所示的电子设备900中的处理器910可以是片上系统SOC,该处理器910中可以包括中央处理器(Central Processing Unit;以下简称:CPU),还可以进一步包括其他类型的处理器,例如:图像处理器(Graphics Processing Unit;以下简称:GPU)等。

总之,处理器910内部的各部分处理器或处理单元可以共同配合实现之前的方法流程,且各部分处理器或处理单元相应的软件程序可存储在存储器920中。

本申请还提供一种电子设备,所述设备包括存储介质和中央处理器,所述存储介质可以是非易失性存储介质,所述存储介质中存储有计算机可执行程序,所述中央处理器与所述非易失性存储介质连接,并执行所述计算机可执行程序以实现本申请图1所示实施例提供的方法。

以上各实施例中,涉及的处理器可以例如包括CPU、DSP、微控制器或数字信号处理器,还可包括GPU、嵌入式神经网络处理器(Neural-network Process Units;以下简称:NPU)和图像信号处理器(Image Signal Processing;以下简称:ISP),该处理器还可包括必要的硬件加速器或逻辑处理硬件电路,如ASIC,或一个或多个用于控制本申请技术方案程序执行的集成电路等。此外,处理器可以具有操作一个或多个软件程序的功能,软件程序可以存储在存储介质中。

本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行本申请图1所示实施例提供的方法。

本申请实施例还提供一种计算机程序产品,该计算机程序产品包括计算机程序,当其在计算机上运行时,使得计算机执行本申请图1所示实施例提供的方法。

本申请实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示单独存在A、同时存在A和B、单独存在B的情况。其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项”及其类似表达,是指的这些项中的任意组合,包括单项或复数项的任意组合。例如,a,b和c中的至少一项可以表示:a,b,c,a和b,a和c,b和c或a和b和c,其中a,b,c可以是单个,也可以是多个。

本领域普通技术人员可以意识到,本文中公开的实施例中描述的各单元及算法步骤,能够以电子硬件、计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,任一功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory;以下简称:ROM)、随机存取存储器(Random Access Memory;以下简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。本申请的保护范围应以所述权利要求的保护范围为准。

相关技术
  • 随机数生成方法、随机数生成装置及电子设备
  • 随机数生成电路、随机数生成方法和电子设备
技术分类

06120112793428