:<<!功能:生成随机的身份证号码作者:zT时间:2020.4.30!function IDcard(){# 18位身份证号码各位的含义:# 1-2位省、自治区、直辖市代码;# 3-4位地级市、盟、自治州代码;# 5-6位县、县级市、区代码;# 7-14位出生年月日,比如19670401代表1967年4月1日;# 15-17位为顺序号,其中17位(倒数第二位)男为单数,女为双数;# 18位为校验码,0-9和X。# 作为尾号的校验码,是由把前十七位数字带入统一的公式计算出来的,# 1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2# 2.将这17位数字和系数相乘的结果相加。# 3.用加出来和除以11,看余数是多少?# 4.余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2function citys(){#省代码1-2 地级市代码3-4 县、区代码5-6random_citys_num=$(($RANDOM %3516 +1))#id.txt文件中-的数量为6或4的都不能使用number=`grep \"^$random_citys_num=\" id.txt|grep -o \'-\' |wc -l`if [[ $number -ne 8 ]];thencitysficitys_string=`grep \"^$random_citys_num=\" id.txt`citys_string1=${citys_string#*=}citys_num=${citys_string1:0:6}}citys#出生年月(1965-2002)7-14yyyy=$(($RANDOM %38 +1965))mm=$(($RANDOM %12 +1))if [[ $mm -eq 2 ]];thendd=$(($RANDOM %27 +1))elsedd=$(($RANDOM %30 +1))fiif [[ $dd -lt 10 ]];thendd=0$ddfiif [[ $mm -lt 10 ]];thenmm=0$mmfitimeDefinition=$yyyy$mm$dd#随机生成顺序号15-17random_num=$(($RANDOM %999))if [[ $random_num -lt 100 ]]&&[[ $random_num -gt 10 ]];thenrandom_num=0$random_numelif [[ $random_num -lt 10 ]];thenrandom_num=00$random_numfinum=$citys_num$timeDefinition$random_num# 18coefficient=(\'7\' \'9\' \'10\' \'5\' \'8\' \'4\' \'2\' \'1\' \'6\' \'3\' \'7\' \'9\' \'10\' \'5\' \'8\' \'4\' \'2\')#求和for((i=0;i<=16;i++));docount=0a=${num:i:1}((a=a*${coefficient[$i]}))((count=count+a))done#求余b=$count%11c=(\'1\' \'0\' \'X\' \'9\' \'8\' \'7\' \'6\' \'5\' \'4\' \'3\' \'2\')last_num=${c[$b]}sfzmhm=$num$last_numecho $sfzmhm}
id.txt文件获取地址