生成随机数几种方式
在shell中有一个环境变量RANDOM,它的范围是0--32767
1、如果我们想要产生0-25范围内的数,如何做呢?如下:
用这个环境变量对26取模,就可以得到最小是0,最大是25的数了。
2、如果想得到1--68范围内的数,可以这样
前面可以得到最小为0,最大为67的随机数,再加上1,很自然的就可以得到最大为1,最小为68的数了。
3、如果想得到6--87范围内的数。可以这样
前面可以得到最小为0,最大为81的随机数,再加上6,很自然的就可以得到最大为87,最小为6的数了。
通过上面三个例子,其它范围内的数一样可以用这种方法产生,总结出规律来
可以类推其它范围内数了
介绍:
1、/dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。
2、这两个设备的差异在于:/dev/random的random pool依赖于系统中断,因此在系统的中断数不足时,/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用, /dev/random设备可以保证数据的随机性。/dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高。
3、dev/urandom 和dev/random,都是产生用不为空的随机字符流,区别是
/dev/random设备会封锁,直到系统产生的随机字符流已经充分够用,所以耗用时间较长
/dev/urandom设备不会封锁,数据的随机程度不高,但是一般情况已经够用
4、使用/dev/random比使用/dev/urandom产生大量随机数的速度要慢
通过过滤赛选可以取出随机数或随机字母如下
产生随机字母方式:
NbvFFlhs
[root@centos7 bin]#
产生随机数字方式
用途:
用来产生伪随机字节。随机数字产生器需要一个seed,先已经说过了,在没有/dev/srandom系统下的解决方法是自己做一个~/.rnd文件。如果该程序能让随机数字产生器很满意的被seeded。程序写回一些怪怪的东西回该文件。
用法:
选项说明:
-out file:结果输出到file中。
-rand file(s):指定随机数种子文件,多个文件间用分隔符分开,windows用“;”,OpenVMS用“,“,其他系统用“:”。
-base64:输出结果为BASE64编码数据。
-hex:输出结果为16进制数据。
num:随机数长度。
实例:
可以看见,这12个字节的随机数显示为乱码,可以对随机字符串进行base64编码或用hex格式显示
通过过滤赛选可以取出随机数或随机字母如下
产生随机字母方式:
产生随机数字方式
四、应用
字体加颜色
\033[33m 字符 \033[0m [[31m 字符 [[0m
随机颜色
color= RANDOM%8+31]
\033[${color}m 字符 \033[0m
存放颜色案例的文件
cat /etc/DIR_COLORS
怎么生成随机数
众所周知,中琅条码软件可以批量打印条码二维码以及各种各样的产品标签,功能比较齐全,操作也非常简单,今天小编就给大家简单介绍下条码软件中如何随机生成0-9个位数字。在条码软件中随机生成0-9个位数字有两种方法,一是应用条码软件自带的“随机生成”工具,二是利用“脚本编程”工具。条码软件中数据对象类型有一个“随机生成”功能,可以简单快捷的随机生成0-9个位数字。接下来看看具体的工具应用。在条码软件中绘制一个普通文本,打开普通文本的属性-数据源,修改当前默认数据,数据对象类型选择“随机生成”,字符集默认为“0123456789”,不需要修改,长度设置为1。这样的话就可以在字符集“0123456789”中随机生成0-9个位数字。条码软件中字符集使用非常灵活,比如想生成的数据总不含4,那么只需要把字符集中的4去除,保留“012356789”,生成的数据中就不包含4。条码软件中另一种随机生成0-9个位数字的方法就是脚本编程,利用脚本实现随机生成0-9数字。数据对象类型选择“脚本编程”,在输入框中输入代码:strReturn=(Math.floor(Math.random()*10) % 10).toString();//随机生成0-9个位数字以上就是条码软件中利用“随机生成”工具和“脚本编程”工具两种随机生成0-9个位数字的方法。条码软件中还有“序列生成”、“数据库导入”、“手动输入”、“日期时间”、“数据引用”、“打印时输入”等数据添加方法,感兴趣的小伙伴可以下载软件体验。附:以下是条码软件中随机生成1-9个位数字代码:strReturn=(Math.floor(Math.random()*9) % 9+1).toString();//随机生成1-9个位数字
我很好奇,计算机真的能产生随机数吗
计算机理论上可以产生统计意义上的真随机数 。首先,「真随机」也有不同的含义, 真正的真随机目测只有量子力学了……一般的所谓真随机不是指这个,而是指 统计意义 上的随机,也就是具备不确定性,可以被安全的用于金融等领域,下面的真随机也均指这个。
大部分程序和语言中的随机数(比如 C 中的,MATLAB 中的),确实都只是 伪随机 。是由可确定的函数(比如线性同余),通过一个种子(比如时钟),产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。
直观来想,计算机是一种可确定,可预测的的设备,想通过一行一行的确定的代码自身产生真随机,显然不可能。但是, 我们或许可以迂回一下 ,一个典型的例子就是 UNIX 内核中的随机数发生器(/dev/random),它在 理论上能产生真随机 。即这个随机数的生成,独立于生成函数,或者说这个产生器是非确定的。
实现方法:简单的讲就是软硬结合,或者说,引入系统外的变量(把软件,代码,算法想象成一个封闭的系统)。具体来讲,UNIX 维护了一个 熵池 ,不断收集非确定性的设备事件,即机器运行环境中产生的 硬件噪音 来作为种子。 比如说:IO请求的响应时间, 特定硬件中断的时间间隔, 键盘敲击速度,鼠标移动速度,甚至周围的电磁波等等……直观的说, 你每按一次键盘,动一下鼠标,邻居家 wifi 信号强度变化,磁盘写入速度,等等信号,都可能被用来生成随机数 。
程序和算法本身不能产生真随机,但是计算机系统作为整体可以迂回产生统计意义上的真随机 。
电脑如何产生随机数?
电脑产生的随机数称为伪随机数,是通过算法模拟的,看上去和随机数一样,实际上能算出来的数就是可以预见的数(对用户来说不可预见,对电脑则是可预见),不是真正的随机数。从一个大数“种子”开始重复某种迭代计算,通常是加减乘除加求余,种子可以取系统时间,因为用户不可能精确到微秒控制程序运行,就基本保证了每次生成数值的顺序不同一般来说如果用数字电路产生的都是伪随机数,但由于循环时间太长可视为随机数。而现在有用模拟电路产生的随机数,主要原理是将热噪声放大,然后编码。扩展资料随机数的作用随机数的使用历史已经有数千年。无论是抛硬币还是摇色子,目的是让随机概率决定结果。电脑中的随机数生成器的目的也是如此——生成随机不可预测的结果。加密法要求数字不能被攻击者猜到,不能多次使用同样的数字。所以需要一种机制产生攻击者无法预测的数字,这些随机数对加密法至关重要,无论你是加密文件还是访问https协议网站,都需要用到随机数。根据随机数的生成原理,我们把电脑随机数分为两类:“真”随机数和伪随机数。要生成一个“真”随机数,电脑会检测电脑外部发生的某种物理现象。比如说,电脑可以测量某个原子的放射性衰变。根据量子理论,原子衰变是随机而不可测的,所以这就是宇宙中的“纯粹”随机性。攻击者永远无法预测原子衰变的发生时间,也就不可能猜出随机值。参考资料来源:百度百科——随机数