前言本文的自定义函数主要讲的是关于身份证号的一些信息,因为我们的身份证号的18位包括知道了我们的地址,出生日期,性别等关键信息,我就不废话了,谈正事。我会陆续写一些PHP开发中实用的自定义函数。使用方便的朋友可以快速开发使用。身份证号码包含的基本信息省市三级地址:身份证号码的前六位出生日期:身份证号码的第七至十四位性别是男是女:身份证号码例如,韦小宝的身份证号码是11204416541220243X,那么就包括以下信息:112044是韦小宝户口所在省市的政府代码,即北京市东城区的16541220是韦小宝的出生日期,即,165412月20日,第17位3,韦小宝男。其他的。。。为了方便大家,我也搜索了省市的政府代码,整理成数组的形式。数组的键是政府代码的六位数字。位数,数组的值为三级省市地址,上传到github。如果您需要,可以点击下面两个链接查看。六位数代码:https://github.com/gxcuizy/Blog/blob/master/code/area_code.php省份代码:https://github.com/gxcuizy/Blog/blob/master/code/province_code.php另外,为了方便大家快速识别身份证的相关信息,我还写了几个函数,只要传入身份证号,就可以获取其中的神秘信息。是不是很刺激,很激动,很惊喜呢?...验证是否为合法身份证号这里我们用最简单的正则表达式来验证身份证的基本格式。不是很严格,但基本够用了。如果想要最有效的验证身份证号码的准确性,需要借助省、市政府代码等进行验证,这里就不做介绍了。/***检查是否是合法身份证号码*@paramstring$id_card身份证号码*@returnbool*/functioncheck_id_card($id_card=''){$pattern='/^\d{6}((1[89])|(2\d))\d{2}((0\d)|(1[0-2]))((3[01])|([0-2]\d))\d{3}(\d|X)$/i';$res=preg_match($pattern,$id_card)?真假;return$res;}通过身份证号获取省市地址信息前面说过,身份证号的前六位标识了省市市的三级地址信息。其中两个数字处于第一级。然后,前两个数字表示省份,中间两个数字表示城市,最后两个数字表示城市。数字标识了区域,因此我们可以通过这种关联来获取我们想要的信息。例如下面的方法可以获取用户的三级地址信息和所属省.../***通过身份证号获取省、市、市地址信息*@paramstring$id_card*@returnarray*/functionget_address_by_id_card($id_card=''){//首先导入政府代码数组数据文件require'area_code.php';需要“province_code.php”;//获取政府代码的前两位和前六位$two_code=substr($id_card,0,2);$six_code=substr($id_card,0,6);//获取城市信息$province=$province_code[$two_code];$address=$area_code[$six_code];$res=['province'=>$province,'area'=>$address];return$res;}计算出身份证号第七位的年龄,通过身份证号到第十四位,识别出生日期,即7-10位代表出生年份,10-12位数字代表出生月份,13-14位数字代表出生日期。知道了这一点,我们就可以快速计算出年龄。方法如下:/***根据身份证号计算年龄*@paramstring$id_card身份证号*@returnint*/functionget_age_by_id_card($id_card=''){//获取出生日期$year=substr($id_card,6,4);$month=substr($id_card,10,2);$day=substr($id_card,12,2);//计算时差$age=date("Y",time())-$year;$diff_month=date("m")-$month;$diff_day=date("d")-$day;//如果年龄小于一岁则减1if($age<0||$diff_month<0||$diff_day<0){$age--;}return$age;}判断是否根据身份证成人是否相同,在中国,法定年满18周岁视为成人,需要承担法律责任;然后你知道出生日期,然后你就可以判断你是否成年了,不知不觉,口头上经常提到90后慢慢变老,00后都成年了,时间过得真快.../***通过身份证判断是否成人*@paramstring$id_card身份证号*@returnbool*/functioncheck_adult($id_card=''){//获取出生日期$year=substr($id_card,6,4);$month=substr($id_card,10,2);$day=substr($id_card,12,2);//18年的秒数$adult_time=18*365*24*60*60;//出生日期的时间戳$birthday_time=mktime(0,0,0,$month,$day,$年);//是否成人,默认未成年$is_adult=false;//如果超过18岁则成人if((time()-$birthday_time)>$adult_time){$is_adult=true;}return$is_adult;}通过身份证获取生肖。十二生肖包括:鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪。要计算生肖,我们只需要出生年份。我们以1901为起点进行计算。检查一下,你就会知道。1901年出生的人出生在牛年,以此为一个周期的起点,来计算以后年份的生肖。/***通过身份证获取生肖*@paramstring$id_card身份证号*@returnstring*/functionget_animal_by_card($id_card=''){//获取出生年份$start=1901;$end=substr($id_card,6,4);$remainder=($start-$end)%12;//计算生肖$animal="";如果($remainder==1||$remainder==-11)$animal="rat";elseif($remainder==0)$animal="牛";elseif($remainder==11||$remainder==-1)$animal="老虎";elseif($remainder==10||$remainder==-2)$animal="兔子";elseif($remainder==9||$remainder==-3)$animal="龙";elseif($remainder==8||$remainder==-4)$animal="蛇";elseif($remainder==7||$remainder==-5)$animal="马";elseif($remainder==6||$remainder==-6)$animal="羊";elseif($remainder==5||$remainder==-7)$animal="猴子";elseif($remainder==4||$remainder==-8)$animal="chicken";elseif($remainder==3||$remainder==-9)$animal="狗";否则如果($remainder==2||$remainder==-10)$animal="猪";return$animal;}通过身份证获取星座上面说了可以用年来推算生肖,那么可以用月日推算出来的,当然是星座了;那么星座是怎么划分的呢?我查了百度百科。具体划分规则如下:白羊座每年3月21日至4月20日金牛座每年4月21日至5月20日双子座每年5月21日至6月21日巨蟹座每年6月22日至7月22日狮子座7月23日每年8月22日处女座每年8月23日至9月22日天秤座每年9月23日至10月23日天蝎座每年10月24日~11月22日射手座每年11月23日~每年12月21日摩羯座每年12月22日~每年1月19日每年水瓶座每年1月20日~每年2月18日双鱼座每年2月19日到3月20日都有计算规则,可以快速得到自己所属的星座。方法如下:/***通过身份证获取自己所属的星座*@paramstring$id_card身份证号*@returnstring*/functionget_constellation_by_card($id_card=''){//截取生日时间$birthday=substr($id_card,10,4);$month=substr($birthday,0,2);$day=substr($birthday,2);//判断时间范围得到星座$constellation="";如果(($month==1&&$day>=21)||($month==2&&$day<=19))$constellation="水瓶座";elseif(($month==2&&$day>=20)||($month==3&&$day<=20))$constellation="双鱼座";elseif(($month==3&&$day>=21)||($month==4&&$day<=20))$constellation="白羊座";elseif(($month==4&&$day>=21)||($month==5&&$day<=21))$constellation="金牛座";elseif(($month==5&&$day>=22)||($month==6&&$day<=21))$constellation="双子座";elseif(($month==6&&$day>=22)||($month==7&&$day<=22))$constellation="巨蟹座";elseif(($month==7&&$day>=23)||($month==8&&$day<=23))$constellation="Leo";elseif(($month==8&&$day>=24)||($month==9&&$day<=23))$constellation="处女座";elseif(($month==9&&$day>=24)||($month==10&&$day<=23))$constellation="Libra";elseif(($month==10&&$day>=24)||($month==11&&$day<=22))$constellation="天蝎座";elseif(($month==11&&$day>=23)||($month==12&&am;$day<=21))$constellation="射手座";elseif(($month==12&&$day>=22)||($month==1&&$day<=20))$constellation="摩羯座";return$constellation;}通过身份证获取性别。上面知道身份证的地址和出生日期。那么,世界那么大,其实只有两种人,那就是男人和女人,当然嘛,还有一种人,网上说女医生。不是很懂,也不敢深究。我暂时不讨论它。足以区分男女。身份证号码中第十七位表示性别,即:偶数为女,奇数为男。/***通过身份证获取性别*@paramstring$id_card身份证号*@returnstring*/functionget_sex($id_card=''){//第十七位,偶数识别女性,奇数识别男性$sex_num=substr($id_card,16,1);$sex=$sex_num%2===0?'女人男人';return$sex;}自定义函数源码为了方便,我把所有的自定义函数都编译成一个文件,上传到同性交友网站GitHub,方便交流使用,也方便求大家帮我排查。需要的同学可以自行领取。我会不时更新它。地址如下:函数源码地址:https://github.com/gxcuizy/Blog/blob/master/code/common.php最后会慢慢更新其他实用的自定义函数,如果大家有其他好玩有用的欢迎分享,大家一起学习交流。顺便说一下,如果有不对或不对的地方,请指出,我会尽力改进,谢谢。
