山那边是海 发表于 2015-1-16 22:15:04

PHP编程:PHP的身份证号码工具类翻译的谁人Java的...

工具程序用来显示RasmusLerdorf的个人履历,以及统计网页流量。<?php/***身份证工具类**@authorTongleXu<xutongle@gmail.com>2013-6-6*@copyrightCopyright(c)2003-2103tintsoft.com*@licensehttp://www.php100.com*@version$Id$*/classUtils_Idcard{/***中国国民身份证号码最小长度。*/constCHINA_ID_MIN_LENGTH=15;/***中国国民身份证号码最年夜长度。*/constCHINA_ID_MAX_LENGTH=18;/***最低年限*/constMIN=1930;/***省、直辖市代码表*/publicstatic$cityCode=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");/***每位加权因子*/publicstatic$power=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);/***第18位校检码*/publicstatic$verifyCode=array("1","0","X","9","8","7","6","5","4","3","2");/***国际身份证校验*/publicstatic$cityCodes=array(11=>北京);/***将15位身份证号码转换为18位**@paramidCard15位身份编码*@return18位身份编码*/publicstaticfunctionconver15CardTo18($idCard){$idCard18="";if(strlen($idCard)!=self::CHINA_ID_MIN_LENGTH){returnnull;}if(self::isNum($idCard)){//猎取出身年代日$sYear=19.substr($idCard,6,2);$idCard18=substr($idCard,0,6).$sYear.substr($idCard,8);//转换字符数组$iArr=str_split($idCard18);if($iArr!=null){$iSum17=self::getPowerSum($iArr);//猎取校验位$sVal=self::getCheckCode18($iSum17);if(strlen($sVal)>0){$idCard18.=$sVal;}else{returnnull;}}}else{returnnull;}return$idCard18;}/***考证身份证是不是正当*/publicstaticfunctionvalidateCard($idCard){$card=trim($idCard);if(self::validateIdCard18($card)){returntrue;}if(self::validateIdCard15($card)){returntrue;}returnfalse;}/***考证18位身份编码是不是正当**@paramint$idCard身份编码*@returnboolean是不是正当*/publicstaticfunctionvalidateIdCard18($idCard){$bTrue=false;if(strlen($idCard)==self::CHINA_ID_MAX_LENGTH){//前17位$code17=substr($idCard,0,17);//第18位$code18=substr($idCard,17,1);if(self::isNum($code17)){$iArr=str_split($code17);if($iArr!=null){$iSum17=self::getPowerSum($iArr);//猎取校验位$val=self::getCheckCode18($iSum17);if(strlen($val)>0&&$val==$code18){$bTrue=true;}}}}return$bTrue;}/***考证15位身份编码是不是正当**@paramstring$idCard身份编码*@returnboolean是不是正当*/publicstaticfunctionvalidateIdCard15($idCard){if(strlen($idCard)!=self::CHINA_ID_MIN_LENGTH){returnfalse;}if(self::isNum($idCard)){$proCode=substr($idCard,0,2);if(!isset(self::$cityCodes[$proCode])){returnfalse;}//升到18位$idCard=self::conver15CardTo18($idCard);returnself::validateIdCard18($idCard);}else{returnfalse;}returntrue;}/***依据身份编号猎取岁数**@paramstringidCard身份编号*@return岁数*/publicstaticfunctiongetAgeByIdCard($idCard){$iAge=0;if(strlen($idCard)==self::CHINA_ID_MIN_LENGTH){$idCard=self::conver15CardTo18($idCard);}$year=substr($idCard,6,4);$iCurrYear=date(Y,time());$iAge=$iCurrYear-$year;return$iAge;}/***依据身份编号猎取诞辰天**@paramstring$idCard身份编号*@returnNULLstring*/publicstaticfunctiongetDateByIdCard($idCard){$len=strlen($idCard);if($len<self::CHINA_ID_MIN_LENGTH){returnnull;}elseif($len==CHINA_ID_MIN_LENGTH){$idCard=self::conver15CardTo18($idCard);}returnsubstr($idCard,12,2);}/***依据身份编号猎取性别**@paramstring$idCard身份编号*@return性别(M-男,F-女,N-未知)*/publicstaticfunctiongetGenderByIdCard($idCard){$sGender="N";if(strlen($idCard)==self::CHINA_ID_MIN_LENGTH){$idCard=self::conver15CardTo18($idCard);}$sCardNum=substr($idCard,16,1);if((int)$sCardNum%2!=0){$sGender="M";}else{$sGender="F";}return$sGender;}/***依据身份编号猎取户籍省分**@paramstring$idCard身份编号*@returnstring*/publicstaticfunctiongetProvinceByIdCard($idCard){$len=strlen($idCard);$sProvince=null;$sProvinNum="";if($len==self::CHINA_ID_MIN_LENGTH$len==self::CHINA_ID_MAX_LENGTH){$sProvinNum=substr($idCard,0,2);}$sProvince=self::$cityCodes[$sProvinNum];return$sProvince;}/***数字考证**@paramint$val*/publicstaticfunctionisNum($val){return$val==null$val==""?false:0<preg_match(/^*$/,$val);}/***考证小于以后日期是不是无效**@paramint$iYear待考证日期(年)*@paramint$iMonth待考证日期(月1-12)*@paramint$iDate待考证日期(日)*@return是不是无效*/publicstaticfunctionvaliDate($iYear,$iMonth,$iDate){$year=date(Y,time());if($iYear<self::MIN$iYear>=$year){returnfalse;}if($iMonth<1$iMonth>12){returnfalse;}switch($iMonth){case4:case6:case9:case11:$datePerMonth=30;break;case2:$dm=(($iYear%4==0&&$iYear%100!=0)($iYear%400==0))&&($iYear>self::MIN&&$iYear<$year);$datePerMonth=$dm?29:28;break;default:$datePerMonth=31;}return($iDate>=1)&&($iDate<=$datePerMonth);}/***将身份证的每位和对应位的加权因子相乘以后,再失掉和值**@paramarray$iArr*@return身份证编码。*/privatestaticfunctiongetPowerSum($iArr){$iSum=0;$power_len=count(self::$power);$iarr_len=count($iArr);if($power_len==$iarr_len){for($i=0;$i<$iarr_len;$i++){for($j=0;$j<$power_len;$j++){if($i==$j){$iSum=$iSum+$iArr[$i]*self::$power[$j];}}}}return$iSum;}/***将power和值与11取模取得余数举行校验码判别**@paramint$iSum*@return校验位*/privatestaticfunctiongetCheckCode18($iSum){$sCode="";switch($iSum%11){case10:$sCode="2";break;case9:$sCode="3";break;case8:$sCode="4";break;case7:$sCode="5";break;case6:$sCode="6";break;case5:$sCode="7";break;case4:$sCode="8";break;case3:$sCode="9";break;case2:$sCode="x";break;case1:$sCode="0";break;case0:$sCode="1";break;}return$sCode;}}刚开始觉得自己对这些多少有些基础,很简单,但是看了老师那么熟练的进行网页布局的时候,突然之间发现,其实,我的基础并没有自己想像的那么好,自己设计的页面其实并不好看,就连表格的边框为1像素都不会弄。

爱飞 发表于 2015-1-19 05:14:01

作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。

简单生活 发表于 2015-1-24 11:20:16

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

灵魂腐蚀 发表于 2015-2-1 09:00:20

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

乐观 发表于 2015-2-7 02:01:58

学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql

小魔女 发表于 2015-2-19 17:21:08

有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。

莫相离 发表于 2015-3-6 15:19:56

没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。

小女巫 发表于 2015-3-13 03:10:49

个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。

再现理想 发表于 2015-3-20 11:23:00

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
页: [1]
查看完整版本: PHP编程:PHP的身份证号码东西类翻译的谁人Java的...