首页 > 其他分享 >生成随机数的若干种方法

生成随机数的若干种方法

时间:2022-08-30 21:22:19浏览次数:38  
标签:10 dev 生成 centos7 随机 随机数 字符串 若干种 root

背景:

  创建账户时我们需要配置初始随机密码,使用手机号注册时需要随机验证码,抽奖活动需要随机点名,俄罗斯方块游戏需要随机出形状。这些案例都在说明一个问题,随机数据很重要!而在 Shell 脚本中如果需要生成随机数据有哪些方式呢?下面我们依次看看都有哪些方式。

方法一:使用字符串截取提取随机密码

定义字符串取值范围,利用随机截取一位,通过循环迭代,拼凑取出适合长度的字符串

#  自定义变量: 例如 10 个数字+52 个字符(26位英文字母大小写)
key="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

randpass(){
 if [ -z "$1" ];then
 echo "randpass 函数需要一个参数,用来指定提取的随机数个数."
 return 127
 fi
#调用$1 参数,循环提取任意个数据字符
#用随机数对 62 取余数,返回的结果为[0-61]
 pass=""
 for i in `seq $1`
 do
 num=$[RANDOM%${#key}]
 local tmp=${key:num:1}
 pass=${pass}${tmp}
 done
 echo $pass
}
randpass 8

方法二:使用命令生成随机数据

Linux 本身有些命令是可以提供随机字符串,或者是对一些字符串进行加密,通过调用这些命令生成的字符串配合一些截取命令,可以轻松获得指定长度的随机字符串。

[root@centos7 ~]# uuidgen #生成 16 进制随机字符串
d1c7c974-2e94-4f31-bdd7-0b2f697aea6b
[root@centos7 ~]# openssl rand -hex 4 #生成 16 进制随机字符串
38a61465
[root@centos7 ~]# openssl rand -base64 6
7ZwWj1hX
[root@centos7 ]# echo 123|md5sum
ba1f2511fc30423bdbb183fe33f3dd0f
[root@centos7 ]#  a=$(echo 123|sha256sum)
[root@centos7 ]## echo ${a:1:6}
81210f

方法三:使用设备文件生成随机数据 

在 Linux 操作系统中默认提供了两个可以生成随机数据的设备文件:/dev/random 和/dev/urandom

 

提取 10 位包含字母、数字和下画线的随机数据。
[root@centos7 ~]# tr -cd '_a-zA-Z0-9' < /dev/random | head -c 10
aw23954A9
[root@centos7 ~]# tr -cd '_a-zA-Z0-9' < /dev/urandom | head -c 10
LiV9uZVyJN
提取 10 位包含存数字的随机数据。
[root@centos7 ~]# tr -cd '0-9' < /dev/random | head -c 10
7565203215
[root@centos7 ~]# tr -cd '0-9' < /dev/urandom | head -c 10
5690607214

 

标签:10,dev,生成,centos7,随机,随机数,字符串,若干种,root
From: https://www.cnblogs.com/xiong97/p/16640850.html

相关文章

  • c++的随机数
    一直以来用cstdlib里的rand来抽卡过题 C++11有了新的库,似乎能有更好的随机数生成.梅森旋转法?C++随机数知乎这里贴一下代码,方便以后使用随机数生成 #include<ra......
  • geopandas 生成 geojson 文件
    创建GeoDataFrame 输出geojson文件importgeopandasss=np.stack((lon.flatten(),lat.flatten()),1)ss1=[Point(ss[0].tolist())foriinss]print(ss)......
  • Power Shell 生成ssh key
    生成新的SSH公私钥对以下PowerShell脚本检查是否存在已有的SSH公私钥对,如果不存在,则生成一对新的公私钥对if((-not(Test-Path-Path$HOME/.ssh-PathTypeConta......
  • C# net PDMan/CHINER/元数建模 生成SqlSugar 代码生成器模板
    C#netPDMan/CHINER/元数建模生成SqlSugar代码生成器模板C#netPDManCHINER元数建模生成SqlSugar代码生成器模板 在版本>=4.0.0版本中增加分类 代码生成器......
  • JS 1到10随机数,2到10随机数
    Math.random()返回一个0~1之间的随机数;Math.floor()向下取整;Math.ceil()向上取整;Math.round()四舍五入;Math.fround()32位浮点数;1~10随机数letnum......
  • .NET 文件系统(一)-- EfCore的使用,反射生成DbSet与Autofac的使用
    项目基础设计1.创建FileDownLoadSystem空解决方案的项目2.创建FileDownLoadSystem.APIAPI项目3.创建FileDownLoadSystem.Core类库4.创建FileDownLoadSystem.Entity......
  • drf快速生成5个基本的api接口
    序列化器serializer:fromrest_frameworkimportserializersfrom.modelsimportStudentclassStudentModelSerializer(serializers.ModelSerializer):classM......
  • Cocos 二维码动态生成(QRCode、JQuery)
    版本:2.4.4jquery.qrcode库文件:下载地址 一效果展示根据地址http://www.xxx.com动态生成一个二维码,logo图片可自定义。 二生成二维码需要的库,JQuery和JQuery.qrc......
  • acme 生成 https 证书
    下载安装acme curlhttps://get.acme.sh|sh命令执行后,需要关闭终端,重新连接命令就能生效了 执行下面的命令生成证书-d指定需要生成证书的域名--webroot 网站......
  • pytest相关参数及allure生成report报告的相关参数
    一、pytest的相关参数-s输出打印信息,关闭捕捉;(如果要生成报告,就需要去掉该参数)-v显示具体的详细信息;-k执行包含关键字的用例-q简化输出信息-x出现一条测试用例失......