随机产生一个类似身份证号码的18位字符串
来源:互联网 发布:饮水机控温器单片机 编辑:程序博客网 时间:2024/06/06 00:32
我们在玩一些游戏的时候,有的会要求我们填写身份证信息,而且有较为严格的身份证验证,给人的感觉就像是真能验证一样,其实想要真正的验证身份证信息是否正确是需要接入公安部门的身份证查询系统的.然而并不是所有的软件都能拿到这个权限的,而没有拿到权限的他们是怎么判断的尼,其实答案就是身份证的最后一位,通过计算来判断身份证的最后一位是否正确就行了.下面我将提供两种方式来产生一个随机的18位字符串方式一:可自定义产生区间
public function random_card(){ $city = array(11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91); //校验位 $parity = array('1','0','X','9','8','7','6','5','4','3','2');// $a = array('a','b','c'); $arr = array(0,1,2,3,4,5); $str = '';// echo $city[array_rand($city)]; //前两位 $str .=$city[array_rand($city)]; //地区位后四位 for($i=0;$i<4;$i++){ $str .=$arr[array_rand($arr)]; } //出生年 随机20世纪 $str .= '19'.mt_rand(0,9).mt_rand(0,9); //月份 $month = array('01','02','03','04','05','06','07','08','09','10','11','12'); $str .=$month[array_rand($month)]; //天 $day = mt_rand(0,3); if($day==3){ $str .=$day.mt_rand(0,1); }else{ $str .=$day.mt_rand(0,9); } //顺序码 for($i=0;$i<3;$i++){ $str .=mt_rand(0,9); } //计算加权因子 for($i=18;$i>1;$i--){ $factor[] = fmod(pow(2,$i-1),11); } //将加权因子和身份证号对应相乘,再求和 $sum = 0; for($i=0;$i<count($factor);$i++){ $sum +=$factor[$i]*$str[$i]; } //将sum对11求余 $mod = fmod($sum,11); $str .=$parity[$mod]; echo $str; }
方式二:先随机产生一个17位数字,再加上一位校验码,检测该18位字符串是否符合身份证规则
public function varifi_card($card=''){ //将身份证转化为string $cardStr = (string)$card; //验证身份证长度是否为18位 if(strlen($cardStr)==18){// 验证格式是否正确 $pattern = "/\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)/i"; if(preg_match($pattern,$cardStr)){ //匹配前两位所对应的地区是否正确 $city = array(11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91); if(in_array(substr($cardStr,0,2),$city)){ //计算加权因子 for($i=18;$i>1;$i--){ $factor[] = fmod(pow(2,$i-1),11); } //校验位 $parity = array('1','0','X','9','8','7','6','5','4','3','2'); //将加权因子和身份证号对应相乘,再求和 $sum = 0; for($i=0;$i<count($factor);$i++){ $sum +=$factor[$i]*$cardStr[$i]; } //将sum对11求余 $mod = fmod($sum,11);// 如果校验位的第$mod位与身份证最后一位相等,则身份证验证通过 if($parity[$mod]==substr($cardStr,-1,1)){ return true; }else{ return false; } } }else{ echo '身份证格式错误'; } }else{ echo '输入的18位身份证号码'; } } public function get_randomcard(){ $str = ''; $boolean = ture; //校验位 $parity = array('1','0','X','9','8','7','6','5','4','3','2'); while ($boolean){// 随机一个17位的数字 $str .=mt_rand(0,99999999999999999); $str .=$parity[array_rand($parity)];// 判断身份证是否正确 $card = $this->varifi_card($str); if($card){ //正确则返回 return $str; } } }
1 0
- 随机产生一个类似身份证号码的18位字符串
- 产生所有的18位和15位的身份证号码
- 随机产生一个字符串
- 随机产生32位字符串
- C#随机产生10位大写字母的字符串
- 产生随机的字符串
- C#随机生成18位身份证号码
- iOS 随机产生32位字符串
- 如何随机产生一个自定义长度的字符串?
- 18位身份证号码的校验
- java小例子:生成一个6位的随机字符串
- php怎样生成一个32位的随机字符串?
- python 身份证号码验证和随机产生
- 随机验证码生成(生成一个含有n位随机数字的字符串)
- 产生随机字符串的一种方法
- 随机产生一组中文字符串的方法
- python中实现产生随机的字符串
- php 产生带数字的随机字符串
- SVN常用命令与分支操作
- 清空一个表中字段的方法
- 補交作業 -- factory
- mac下常用工具的安装配置
- 数据结构与算法(三)栈&&队列
- 随机产生一个类似身份证号码的18位字符串
- JQuery中的html(),text(),val()区别
- python3+PyQt5 创建网络应用-TCP客户端和TCP服务器
- RecyclerView抽取基类,item实现点击,增加分割线
- 中关村维修被黑
- Wininet编程之在windows环境下http协议编程
- 事务、试图、索引、备份和恢复
- C#从Excel导入到MSSQL
- 构建单页Web应用