#!/bin/bash
#生成随机身份证号,性别,年龄,电话,姓名,日期,分数和对应等级,并生成insert语句
#作者AiYS,2018-02-06,转载请注明http://www.cnblogs.com/AiYS/p/8424334.html

#随机身份证号,性别和年龄
function random_id {
#身份证前6位地区码集合
area_code_collection=($(awk '{print $1}' area_code.txt))
#从地区码集合中随机取一个地区码
area_code=${area_code_collection[$(shuf -i 0-3513 -n 1)]}
#随机生成生日
birthday=$(date +"%Y%m%d" -d "-$(shuf -i 1000-15000 -n 1) days")
#计算当前年份
current_year=$(date +"%Y%m%d" | cut -c 1-4)
#计算生成的身份证号的年份
id_year=$(echo ${birthday} | cut -c 1-4)
#根据当前年份和身份证号年份计算年龄
age=$((${current_year}-${id_year}))
#随机生成身份证15-17的3位顺序码,但是不知范围暂定400
seq=$(shuf -i 100-400 -n 1)
#根据身份证第17位判断性别,奇男偶女
gender_num=$(echo ${seq} | cut -c 3)
[ $((gender_num%2)) -eq 0 ] && gender="F" || gender="M"
#用数组保存身份证号前17位的每一位
for ((i=0,j=1;i<17;i++,j++))
do
array[$i]=$(echo ${area_code}${birthday}${seq} | cut -c $j)
done
sum=0
#用字典保存取模11后余数对映的第18位映射关系
declare -A checkcode_map
checkcode_map=(["0"]="1" ["1"]="0" ["2"]="X" ["3"]="9" ["4"]="8" ["5"]="7" ["6"]="6" ["7"]="5" ["8"]="5" ["9"]="3" ["10"]="2")
#前17位对应的权重值
coefficient=(7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2)
#前17位乘以对应的权重求和
for ((i=0;i<17;i++))
do
sum=$((${sum}+${array[$i]}*${coefficient[$i]}))
done
#和取模11
map=$((sum%11))
#生成第18位校验码
checkcode=${checkcode_map[$map]}
echo -e "${area_code}${birthday}${seq}${checkcode},${gender},${age}" >> id.txt
}

#生成随机电话号码
function random_tel {
pretel=(130 131 132 133 134 135 136 137 138 139 145 147 150 151 152 153 155 156 157 158 159 170 171 173 176 177 178 180 181 182 183 184 185 186 187 188 189)
echo ${pretel[$(shuf -i 0-36 -n 1)]}$(shuf -i 10000000-99999999 -n 1) >> tel.txt
}

#生成随机姓名
function random_name {
fname=(赵 钱 孙 李 周 吴 郑 王 冯 陈 褚 卫 蒋 沈 韩 杨 朱 秦 尤 许 何 吕 施 张 孔 曹 严 华 金 魏 陶 姜 戚 谢 邹 窦 章 云 苏 潘 葛 奚 范 彭 郎 鲁 韦 昌 马 苗 凤 花 方 俞 任 袁 柳 鲍 史 唐 费 廉 岑 薛 雷 贺 倪 汤 滕 殷 罗 毕 郝 安 常 乐 于 傅 齐 康 伍 余 元 顾 孟 平 黄 穆 萧 尹 姚 邵 湛 汪 祁 毛 禹 狄 戴 谈 宋 茅 庞 熊 纪 舒 屈 项 祝 董 梁 杜 阮 蓝 闵 席 季 贾 江 童 颜 郭 梅 盛 林 徐 邱 骆 高 夏 蔡 田 樊 胡 凌 霍 虞 万 柯 管 卢 莫 解 宗 丁 邓 单 洪 包 石 崔 吉 钮 龚 程 嵇 邢 裴 陆 荀 羊 甄 麴 封 芮 羿 储 靳 邴 糜 松 段 伊 刘 景 龙 叶 白 赖 卓 蔺 屠 乔 阳 闻 党 翟 谭 姬 申 郦 牛 扈 燕 温 晏 柴 瞿 阎 习 向 古 廖 寇 聂 晁 曾 司马 上官 欧阳 夏侯 诸葛 东方 赫连 皇甫 尉迟 公羊 澹台 公孙 轩辕 令狐 钟离 宇文 长孙 慕容 司徒 完颜)
lname=($(awk '{print $1}' lname.txt))
echo ${fname[$(shuf -i 0-226 -n 1)]}${lname[$(shuf -i 0-2810 -n 1)]}${lname[$(shuf -i 0-2810 -n 1)]} >> name.txt
}

#生成随机日期和时间
function random_time {
echo "$(date +"%Y-%m-%d" -d "-$(shuf -i 365-10000 -n 1) days"),$(date +"%Y-%m-%d %H:%M:%S" -d "-$(shuf -i 5000-12000 -n 1) days")" >> date.txt
}

#生成随机的分数和对应的等级
function random_score {
integer=$(shuf -i 40-99 -n 1)
#decimal=$(tr -dc 0-9 </dev/urandom | head -c 2)两位随机小数
decimal=$(shuf -i 0-9 -n 1)
score="${integer}.${decimal}"
if [ ${integer} -gt 95 ];then
grade='S'
elif [ ${integer} -gt 85 ];then
grade='A'
elif [ ${integer} -gt 75 ];then
grade='B'
elif [ ${integer} -gt 65 ];then
grade='C'
else
grade='D'
fi
echo "${score},${grade}" >> score.txt
}

#删除之前生成的文件
function delete_file {
[ -f id.txt ] && $(rm id.txt) >/dev/null 2>&1
[ -f name.txt ] && $(rm name.txt) >/dev/null 2>&1
[ -f tel.txt ] && $(rm tel.txt) >/dev/null 2>&1
[ -f date.txt ] && $(rm date.txt) >/dev/null 2>&1
[ -f score.txt ] && $(rm score.txt) >/dev/null 2>&1
}

function generate_records {
read -p "需要生成多少条记录:" count
delete_file
if [ ${count} -lt 0 ];then
echo -e "输入错误!输入的数字小于1\n"
else
for ((m=0;m<${count};m++))
do
random_id
random_name
random_tel
random_time
random_score
#echo "生成第$m条记录"
done
fi
#合并生成的文件用,分隔字段
paste -d "," id.txt name.txt tel.txt date.txt score.txt > records.txt
delete_file
}

function sql {
[ -f student.sql ] && $(rm student.sql) > /dev/null 2>&1
#生成sql插入文件student.sql
outfile='student.sql'
IFS=","
while read id gender age name tel entrance examination score grade
do
cat >> ${outfile} << EOF
INSERT INTO student (id,name,gender,age,tel,entrance,examination,score,grade) VALUES ('${id}','${name}','${gender}',$age,'${tel}',${entrance},${examination},${score},'${grade}');
EOF
done < records.txt
}

generate_records
read -p "是否生成sql文件?y or n:" yn
[ "$yn" = "y" -o "$yn" = "Y" ] && sql || echo "Byebye"

shell随机生成身份证,姓名,电话,日期,分数,等级和insert语句的更多相关文章

  1. Java 随机生成中文姓名,手机号,邮编,住址

    package lovo; import java.util.HashMap; import java.util.Map; /** * 随机生成中文姓名,性别,Email,手机号,住址 * @auth ...

  2. PHP随机生成中国人姓名的类

    PHP随机生成类 <?php /*rndChinaName.class.php*/ Class rndChinaName { private $arrXing,$numbXing; privat ...

  3. Shell随机生成字符串

    随机生成18位的字符串,数字 大小写字符 斜线 password=`openssl rand -base64 |-`

  4. SQLServer 随机生成指定范围的日期

    一个分页的问题,DTCms3.0中,分页是根据时间分页的,如果当添加时间(add_time)都是同一个数值时,不管点击第几页,显示的数据都是同一个的内容,于是就有了需要把同一个时间改指定随机日期的功能 ...

  5. c#随机生成中文姓名

    为什么要自己写这个生成器呢?大家应该都有过为测试数据发愁的时候,我就是出于这样的原因. 尽管本次代码很少,但是还会有后续的生成器分享出来. 我代码底子还不是很好,希望各位同道能够发表意见,同是也欢迎大 ...

  6. SqlServer 随机生成中文姓名(转)

    ,) )) -- 姓氏 ,) )) -- 名字 INSERT @fName VALUES ('赵'),('钱'),('孙'),('李'),('周'),('吴'),('郑'),('王'),('冯'),( ...

  7. Golang 随机生成中国人姓名

    package main import ( "fmt" "math/rand" "time" ) var lastName = []stri ...

  8. java 随机生成身份证代码

    import java.util.Calendar; import java.util.Collection; import java.util.HashMap; import java.util.I ...

  9. Python 随机生成有效手机号码及身份证

    中国那么大,人那么多,几乎人手一部手机.手机号码已经作为各大互联网站的注册账户.同样,身份证更是如此.以下是生成有效手机号码和身份证号. 身份证需要下载districtcode.txt这个文件:htt ...

随机推荐

  1. hdu5893 List wants to travel

    裸的树链剖分加线段树区间修改 区间合并时需要多注意一点 当时写的很慢 理解不深刻 #include<bits/stdc++.h> using namespace std; const in ...

  2. 异常-----The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path。

    1, 找到新建页面所在的工程名字,然后左键选中,右键弹出功能菜单,选择Build Path,进入配置路径. 2, 在java build path 页面的下选择Libraries栏目(默认选择),点击 ...

  3. cookie的初步认识

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  4. ViewGroup事件分发机制解析

    最近在看View的事件分发机制,感觉比复杂的地方就是ViewGrop的dispatchTouchEvent函数,便对照着源码研究了一下.故名思意这个函数起到的作用就是分发事件,在具体分析之前还要说明几 ...

  5. Bzoj4916: 神犇和蒟蒻

    题面 传送门 Sol 第一问puts("1") 第二问,\(\varphi(i^2)=i\varphi(i)\) 设\(\phi(n)=\sum_{i=1}^{n}i\varphi ...

  6. C#多线程编程(6)--线程安全2 互锁构造Interlocked

    在线程安全1中,我介绍了线程同步的意义和一种实现线程同步的方法:volatile.volatile关键字属于原子操作的一种,若对一个关键字使用volatile,很多时候会显得很"浪费&quo ...

  7. webuploader配置

    做图片上传的时候用webuploader是个不错的选择,他可以通过简单的配置实现图片的上传预览和处理. <!--引入CSS--> <link rel="stylesheet ...

  8. hadoop新增kerberos租户

    第一步 在kerberos服务器所在主机 通过kadmin.local,也可以通过kadmin 输入用户密码登录 kadmin.local: addprinc -randkey it1@STARYEA ...

  9. openssh/openssl升级到7.4和1.0.2j 源码方式

    #!/bin/bashtar -xvf openssh-7.4p1.tar.gztar -xvf openssl-1.0.2j.tar.gz 升级 openssl 到1.0.2jcd openssl- ...

  10. react-redux状态管理思想

    最近一段一直在加班做项目,几乎每天都要加班到晚上9点,每周也只休息一天,一直没有时间把eact全家桶,再整体熟悉一遍.索性,就在最近的项目中,借鉴了react-redux的思想,维护状态和发布acti ...