1.通过系统环境变量($RANDOM)实现
#RANDOM的随机数的范围为:0~32767,加密性不是很好,可以通过在输出的随机数后增加加密字符串的方式来解决,最后在一起执行md5操作并截取最后的n位,这样一来,就无法通过范围来猜测出具体的结果。
2.通过openssl产生随机数
令数字和大小写相结合,并带上特殊的字符,可以达到很长的位数,这样的随机数就很安全
[chengmo@centos5 shell]$ echo $RANDOM
10918
[chengmo@centos5 shell]$ echo $RANDOM
10001
#连续2次访问,结果不一样,这个数据是一个小于或等于5位的整数
3.通过时间(date)获得随机数
通过时间获得随机数(date)
date +%s%N #生成19位数字,1287764807051101270
date +%s%N | cut -c6-13 #取八位数字,21793709
date +%s%N | md5sum | head -c 8 #八位字母和数字的组合,87022fda
[root@centos5 shell]$ date +%s
1287764773
#获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数
#如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。
[root@centos5 shell]$ date +%N
738710457
#获得当前时间的纳秒数据,精确到亿分之一秒。
#这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞
[root@centos5 shell]$ date +%s%N
1287764807051101270
#这个可以说比较完美了,加入了时间戳,又加上了纳秒