php正则判断是否为合法身份证号的方法

  1. /**
  2. * 判断是否为合法的身份证号码
  3. * @param $mobile
  4. * @return int
  5. */
  6. functionisCreditNo($vStr){
  7. $vCity=array(
  8. ཇ',཈',ཉ',ཊ',ཋ',ད',དྷ',
  9. ན',ཛ',ཛྷ',ཝ',ཞ',ཟ',འ',
  10. ཡ',ཥ',ས',ཧ',ཨ',ཀྵ',ཪ',
  11. ཮',཯',཰',ཱ',ི',ཹ',ེ',
  12. ཻ',ོ',ཽ',ྃ',ྍ',ྎ',ྗ'
  13. );
  14. if(!<a href="/tags.php/preg_match/" target="_blank">preg_match</a>('/^([\d]{17}[xX\d]|[\d]{15})$/',$vStr))returnfalse;
  15. if(!in_array(<a href="/tags.php/substr/" target="_blank">substr</a>($vStr, 0, 2),$vCity))returnfalse;
  16. $vStr= preg_replace('/[xX]$/i','a',$vStr);
  17. $vLength=strlen($vStr);
  18. if($vLength== 18) {
  19. $vBirthday=substr($vStr, 6, 4) .'-'.substr($vStr, 10, 2) .'-'.substr($vStr, 12, 2);
  20. }else{
  21. $vBirthday=ཏ'.substr($vStr, 6, 2) .'-'.substr($vStr, 8, 2) .'-'.substr($vStr, 10, 2);
  22. }
  23. if(date('Y-m-d',<a href="/tags.php/strtotime/" target="_blank">strtotime</a>($vBirthday)) !=$vBirthday)returnfalse;
  24. if($vLength== 18) {
  25. $vSum= 0;
  26. for($i= 17 ;$i>= 0 ;$i--) {
  27. $vSubStr=substr($vStr, 17 -$i, 1);
  28. $vSum+= (pow(2,$i) % 11) * (($vSubStr=='a') ? 10 :intval($vSubStr, 11));
  29. } //phpfensi.com
  30. if($vSum% 11 != 1)returnfalse;
  31. }
  32. returntrue;
  33. }