首頁 >後端開發 >php教程 >PHP的身分證號碼工具類別所翻譯的那個Java的

PHP的身分證號碼工具類別所翻譯的那個Java的

WBOY
WBOY原創
2016-07-25 08:50:59881瀏覽
15자리에서 18자리 ID 번호로 변환을 실현하고 중국 본토 주민 ID 카드, 홍콩 주민 ID 카드, 마카오 ID 카드 및 대만 ID 카드를 확인하세요.
  1. /**
  2. * 신분증 도구 강좌
  3. *
  4. * @author Tongle Xu 2013-6-6
  5. * @copyright Copyright (c) 2003-2103tintsoft.com
  6. * @license http://www.tintsoft.com
  7. * @version $Id$
  8. */
  9. class Utils_Idcard {
  10. /**
  11. * 중국 주민등록번호의 최소 길이입니다.
  12. */
  13. const CHINA_ID_MIN_LENGTH = 15;
  14. /**
  15. * 중국 주민등록번호의 최대 길이입니다.
  16. */
  17. const CHINA_ID_MAX_LENGTH = 18;
  18. /**
  19. * 최소 연도
  20. */
  21. const MIN = 1930;
  22. /**
  23. *지방 및 자치단체 코드표
  24. */
  25. public static $cityCode = 배열 ​​("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" );
  26. /**
  27. * 비트별 가중치 인자
  28. */
  29. public static $power = 배열 ​​(7,9,10,5,8,4,2,1,6,3,7,9,10, 5,8,4,2 );
  30. /**
  31. * 18자리 체크코드
  32. */
  33. public static $verifyCode = 배열 ​​("1","0","X","9"," 8","7","6","5","4","3","2" );
  34. /**
  35. * 국내 신분증 확인
  36. */
  37. public static $cityCodes = array (' 11' => '북쿄' );
  38. /**
  39. * 15자리 ID번호를 18자리로 변환
  40. *
  41. * @param idCard 15자리 식별코드
  42. * @return 18자리 식별코드
  43. */
  44. 공개 정적 함수 conver15CardTo18($idCard) {
  45. $idCard18 = "";
  46. if ( strlen ( $idCard ) != self::CHINA_ID_MIN_LENGTH) {
  47. return null;
  48. }
  49. if (self::isNum ( $idCard )) {
  50. // 获取出生年月日
  51. $sYear = '19' . substr( $idCard, 6, 2 );
  52. $idCard18 = substr( $idCard, 0, 6 ) . $s년. substr ( $idCard, 8 );
  53. // 转换字符数组
  54. $iArr = str_split ( $idCard18 );
  55. if ($iArr != null) {
  56. $iSum17 = self::getPowerSum ( $iArr );
  57. // 获取校验位
  58. $sVal = self::getCheckCode18 ( $iSum17 );
  59. if (strlen ( $sVal ) > 0) {
  60. $idCard18 . = $sVal;
  61. } else {
  62. null 반환;
  63. }
  64. }
  65. } else {
  66. null 반환;
  67. }
  68. $idCard18 반환;
  69. }
  70. /**
  71. * 신분증이 유효한지 확인하세요
  72. */
  73. 공개 정적 함수 verifyCard($idCard) {
  74. $card = 트림( $idCard );
  75. if(self::validateIdCard18( $ 카드 )) {
  76. true 반환;
  77. }
  78. if (self::validateIdCard15 ( $card )) {
  79. true 반환;
  80. }
  81. false 반환;
  82. }
  83. /**
  84. * 18자리 식별 ​​코드가 유효한지 확인
  85. *
  86. * @param int $idCard 식별 코드
  87. * @return boolean 합법 여부
  88. */
  89. 공개 정적 함수 verifyIdCard18($idCard) {
  90. $bTrue = false;
  91. if (strlen ( $idCard ) == self::CHINA_ID_MAX_LENGTH) {
  92. // 이전17位
  93. $code17 = substr ( $idCard, 0, 17 );
  94. // 第18位
  95. $code18 = substr ( $idCard, 17, 1 );
  96. if (self::isNum ( $code17 )) {
  97. $iArr = str_split ( $code17 );
  98. if ($iArr != null) {
  99. $iSum17 = self::getPowerSum ( $ iArr );
  100. // 获取校验位
  101. $val = self::getCheckCode18 ( $iSum17 );
  102. if (strlen ( $val ) > 0 && $val == $code18) {
  103. $bTrue = true;
  104. }
  105. }
  106. }
  107. }
  108. return $bTrue;
  109. }
  110. /**
  111. * 15자리 식별 ​​코드가 적법한지 확인
  112. *
  113. * @param string $idCard 식별 코드
  114. * @return boolean 적법 여부
  115. */
  116. public static function verifyIdCard15($idCard) {
  117. if (strlen ( $idCard ) != self::CHINA_ID_MIN_LENGTH) {
  118. return false;
  119. }
  120. if (self::isNum ( $idCard )) {
  121. $proCode = substr ( $idCard, 0, 2 );
  122. if (! isset ( self::$cityCodes [$proCode] )) {
  123. return false;
  124. }
  125. //升到18位
  126. $idCard = self::conver15CardTo18($idCard);
  127. return self::validateIdCard18($idCard);
  128. } else {
  129. false 반환;
  130. }
  131. true 반환;
  132. }
  133. /**
  134. * ID 번호를 기준으로 나이 가져오기
  135. *
  136. * @param string idCard ID 번호
  137. * @return age
  138. */
  139. 공개 정적 함수 getAgeByIdCard($idCard) {
  140. $iAge = 0;
  141. if (strlen ( $idCard ) == self::CHINA_ID_MIN_LENGTH) {
  142. $idCard = self::conver15CardTo18 ( $idCard );
  143. }
  144. $year = substr( $idCard, 6, 4 );
  145. $iCurrYear = 날짜( 'Y', 시간() );
  146. $iAge = $iCurrYear - $year;
  147. return $iAge;
  148. }
  149. /**
  150. * ID 번호를 기준으로 생일 가져오기
  151. *
  152. * @param string $idCard ID 번호
  153. * @return NULL 문자열
  154. */
  155. 공개 정적 함수 getDateByIdCard($idCard) {
  156. $len = strlen ( $idCard );
  157. if ($len < self::CHINA_ID_MIN_LENGTH) {
  158. return null;
  159. } else if ($len == CHINA_ID_MIN_LENGTH) {
  160. $idCard = self::conver15CardTo18 ( $idCard );
  161. }
  162. return substr ( $idCard, 12, 2 );
  163. }
  164. /**
  165. * ID 번호를 기준으로 성별 가져오기
  166. *
  167. * @param string $idCard ID 번호
  168. * @return 성별(M-남성, F-여성, N-알 수 없음)
  169. */
  170. 공개 정적 함수 getGenderByIdCard($idCard) {
  171. $sGender = "N";
  172. if (strlen ( $idCard ) == self: :CHINA_ID_MIN_LENGTH) {
  173. $idCard = self::conver15CardTo18 ( $idCard );
  174. }
  175. $sCardNum = substr ( $idCard, 16, 1 );
  176. if (( int ) $sCardNum % 2 != 0) {
  177. $sGender = "M";
  178. } else {
  179. $sGender = "F";
  180. }
  181. return $sGender;
  182. }
  183. /**
  184. * 주민등록번호를 기준으로 호적도 구하기
  185. *
  186. * @param string $idCard 주민등록번호
  187. * @return string
  188. */
  189. 공개 정적 함수 getProvinceByIdCard($idCard) {
  190. $len = strlen( $idCard );
  191. $sProvince = null;
  192. $sProvinNum = " ";
  193. if ($len == self::CHINA_ID_MIN_LENGTH || $len == self::CHINA_ID_MAX_LENGTH) {
  194. $sProvinNum = substr ( $idCard, 0, 2 );
  195. }
  196. $sProvince = self::$cityCodes [$sProvinNum];
  197. return $sProvince;
  198. }
  199. /**
  200. * 숫자 검증
  201. *
  202. * @param int $val
  203. */
  204. 공개 정적 함수 isNum($val) {
  205. $val == null || $val == "" ? 거짓: 0 < preg_match ( '/^[0-9]*$/', $val );
  206. }
  207. /**
  208. * 날짜가 현재 날짜보다 작을 경우 유효한지 확인
  209. *
  210. * @param int $iYear 확인할 날짜(연도)
  211. * @param int $iMonth 확인할 날짜 확인(1~12월)
  212. * @param int $iDate 확인 날짜(일)
  213. * @return 유효한지 여부
  214. */
  215. 공개 정적 함수 valiDate($iYear, $iMonth , $iDate) {
  216. $연도 = 날짜 ( 'Y', 시간 () );
  217. if ($iYear < self::MIN || $iYear >= $year) {
  218. return false;
  219. }
  220. if ($iMonth < 1 || $iMonth > 12) {
  221. return false;
  222. }
  223. 스위치($iMonth) {
  224. 사례 4:
  225. 사례 6 :
  226. 사례 9 :
  227. 사례 11 :
  228. $datePerMonth = 30;
  229. break;
  230. 사례 2 :
  231. $dm = (($iYear % 4 = = 0 && $iYear % 100 != 0) || ($iYear % 400 == 0)) && ($iYear > self::MIN && $iYear < $year);
  232. $datePerMonth = $dm ? 29 : 28;
  233. 휴식;
  234. 기본값 :
  235. $datePerMonth = 31;
  236. }
  237. return ($iDate >= 1) && ($iDate <= $datePerMonth);
  238. }
  239. /**
  240. * ID 카드의 각 비트에 해당 비트의 가중치를 곱한 후 합산 값을 구합니다.
  241. *
  242. * @param array $iArr
  243. * @return ID 코드.
  244. */
  245. 개인 정적 함수 getPowerSum($iArr) {
  246. $iSum = 0;
  247. $power_len = count ( self::$power );
  248. $iarr_len = 개수 ( $iArr );
  249. if ($power_len == $iar_len) {
  250. for($i = 0; $i < $iarr_len; $i ) {
  251. for($j = 0; $j if ($i == $j) {
  252. $iSum = $iSum $iArr [$i] * self:: $power [$j];
  253. }
  254. }
  255. }
  256. }
  257. return $iSum;
  258. }
  259. /**
  260. * 검사 코드 판단을 위해 11의 거듭제곱 합계 값을 취하여 나머지를 구합니다
  261. *
  262. * @param int $iSum
  263. * @return 검사 숫자
  264. */
  265. 개인 정적 함수 getCheckCode18($iSum) {
  266. $sCode = "";
  267. 스위치($iSum % 11) {
  268. 사례 10 :
  269. $sCode = "2";
  270. break ;
  271. 사례 9 :
  272. $sCode = "3";
  273. 중단;
  274. 사례 8 :
  275. $sCode = "4";
  276. 중단;
  277. 사례 7:
  278. $sCode = "5";
  279. 중단;
  280. 사례 6 :
  281. $sCode = "6";
  282. 중단;
  283. 사례 5:
  284. $sCode = "7" ;
  285. 중단;
  286. 사례 4 :
  287. $sCode = "8";
  288. 중단;
  289. 사례 3 :
  290. $sCode = "9";
  291. 중단;
  292. 사례 2 :
  293. $sCode = "x";
  294. 중단;
  295. 사례 1 :
  296. $sCode = "0";
  297. 중단;
  298. 사례 0 :
  299. $ sCode = "1";
  300. break;
  301. }
  302. return $sCode;
  303. }
  304. }
复system代码
  1. /**
  2. * 신분증 도구 강좌
  3. *
  4. * @author Tongle Xu 2013-6-6
  5. * @copyright Copyright (c) 2003-2103tintsoft.com
  6. * @license http://www.tintsoft.com
  7. * @version $Id$
  8. */
  9. class Utils_Idcard {
  10. /**
  11. * 중국 주민등록번호의 최소 길이입니다.
  12. */
  13. const CHINA_ID_MIN_LENGTH = 15;
  14. /**
  15. * 중국 주민등록번호의 최대 길이입니다.
  16. */
  17. const CHINA_ID_MAX_LENGTH = 18;
  18. /**
  19. * 最低年限
  20. */
  21. const MIN = 1930;
  22. /
  23. 🎜> public static $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" );
  24. /**
  25. * 省、直轄市代碼表
  26. */
  27. public static $power = array (7,9,10,5,8,4,2,1,6,3,7,9,10, 5,8,4,2 );
  28. /**
  29. * 每位加權因子
  30. */
  31. public static $verifyCode = array ("1","0","X","9"," 8","7","6","5","4","3","2" );
  32. /**
  33. * 第18位校檢碼
  34. */
  35. public static $cityCodes = array (' 11' => '北京','12' => '天津','13' => '河北','14' => '山西','15' => '內蒙古','21' => '遼寧','22' => '吉林','23' => '黑龍江','31' => '上海','32' => '江蘇','33' => '浙江','34 ' => '安徽','35' => '福建','36' => '江西','37' => '山東','41' => '河南','42' => '湖北','43' => '湖南','44' => '廣東','45' => '廣西',
  36. '46' => '海南','50' => '重慶', '51' => '四川','52' => '貴州','53' => '雲南','54' => '西藏','61' => '陝西','62' => '甘肅','15' => '內蒙古','21' => '遼寧','22' => '吉林','23' => '黑龍江','31' => '上海',' 32' => '江蘇','33' => '浙江','34' => '安徽','35' => '福建','36' => '江西','37' => '山東','41' => '河南','42' => '湖北','43' => '湖南',
  37. '44' => '廣東','45' => '廣西' ,'46' => '海南','50' => '重慶','51' => '四川','52' => '貴州','53' => '雲南','54' = > '西藏','61' => '陝西','62' => '甘肅','63' => '青海','64' => '寧夏','65' => '新疆', '71' => '台灣','81' => '香港','82' => '澳門','91' => '國外','63' => '青海','64' => '寧夏','65' => '新疆','71' => '台灣','81' => '香港',
  38. '82' => '澳門','91' => '國外' );
  39. /**
  40. * 國內身分證校驗
  41. */
  42. public static $twFirstCode = array ('A' => 10,'B' => 11,'C' => 12,'D ' => 13,'E' => 14,'F' => 15,'G' => 16,'H' => 17,'J' => 18,'K' => 19,'L' => 20,'M' => 21,'N' => 22,'P' => 23,'Q' => 24,'R' => 25,'S' => 26,'T' = > 27,'U' => 28,'V' => 29,'X' => 30,'Y' => 31,'W' => 32,'Z' => 33,'I' => 34,'O' => 35 );
  43. /**
  44. * 台灣身分證校驗
  45. *
  46. * @var array
  47. */
  48. public static $hkFirstCode = array ('A' => 1,'B' => 2,'C ' => 3,'R' => 18,'U' => 21,'Z' => 26,'X' => 24,'W' => 23,'O' => 15,'N' => 14 );
  49. /**
  50. * 香港身分證校驗
  51. */
  52. public static function conver15CardTo18($idCard) {
  53. $idCard18 = "";
  54. if (strlen ( $idCard ) != self::CHINA_ID_MIN_LENGTH) {
  55. return null;
  56. }
  57. if (self::isNum ( $idCard )) {
  58. // 取得出生年月日
  59. $sYear = ' 19' . substr ( $idCard, 6, 2 );
  60. $idCard18 = substr ( $idCard, 0, 6 ) . $sYear . substr ( $idCard, 8 );
  61. // 轉換字元陣列
  62. $iArr = str_split ( $idCard18 );
  63. if ($iArr != null) {
  64. $iSum17 = self::getPowerSum ( $iArr );
  65. // 取得校驗位
  66. $
  67. $ sVal = self::getCheckCode18 ( $iSum17 );
  68. if (strlen ( $sVal ) > 0) {
  69. $idCard18 .= $sVal;
  70. } else {
  71. return null; }
  72. } else {
  73. return null;
  74. }
  75. return $idCard18;
  76. }
  77. /**
  78. * 將15位元身分證號碼轉換為18位元
  79. *
  80. * @param idCard 15位元身分編碼
  81. * @return 18位元身分編碼
  82. */
  83. * 驗證身分證是否合法
  84. static function validateCard($idCard) {
  85. $card = trim ( $idCard );
  86. if (self::validateIdCard18 ( $card )) {
  87. return true;
  88. }
  89. if ( self::validateIdCard15 ( $card )) {
  90. return true;
  91. }
  92. $cardval = self::validateIdCard10 ( $card );
  93. if ($cardval != null) {
  94. if ($cardval [2] == "true") {
  95. return true;
  96. }
  97. }
  98. return false;
  99. }
  100. /**
  101. * 18자리 식별 ​​코드가 유효한지 확인
  102. *
  103. * @param int $idCard 식별 코드
  104. * @return boolean 합법 여부
  105. */
  106. 공개 정적 함수 verifyIdCard18($idCard) {
  107. $bTrue = false;
  108. if (strlen ( $idCard ) == self::CHINA_ID_MAX_LENGTH ) {
  109. // 전17位
  110. $code17 = substr ( $idCard, 0, 17 );
  111. // 第18位
  112. $code18 = substr ( $idCard, 17, 1 );
  113. if (self::isNum ( $code17 )) {
  114. $iArr = str_split ( $code17 );
  115. if ($iArr != null) {
  116. $iSum17 = self::getPowerSum ( $iArr );
  117. // 获取校验位
  118. $val = self::getCheckCode18 ( $iSum17 );
  119. if (strlen ( $val ) > 0 && $val == $code18) {
  120. $bTrue = true;
  121. }
  122. }
  123. }
  124. }
  125. return $bTrue;
  126. }
  127. /**
  128. * 15자리 식별 ​​코드가 적법한지 확인
  129. *
  130. * @param string $idCard 식별 코드
  131. * @return boolean 적법 여부
  132. */
  133. 공개 정적 함수 verifyIdCard15($idCard) {
  134. if (strlen ( $idCard ) != self::CHINA_ID_MIN_LENGTH) {
  135. return false;
  136. }
  137. if (self::isNum ( $ idCard )) {
  138. $proCode = substr ( $idCard, 0, 2 );
  139. if (! isset ( self::$cityCodes [$proCode] )) {
  140. return false;
  141. }
  142. // 升到18位
  143. $idCard = self::conver15CardTo18 ( $idCard );
  144. return self::validateIdCard18 ( $idCard );
  145. } else {
  146. return false;
  147. }
  148. return true;
  149. }
  150. /**
  151. * 10자리 식별 ​​코드가 유효한지 확인
  152. *
  153. * @param idCard 식별 코드
  154. * @return ID 카드 정보 배열

  155. * [0] - 대만, 마카오, 홍콩 [1] - 성별(남성 M, 여성 F, 알 수 없음 N) [2] - 적법한가(법적 참, 불법 거짓)
  156. * 주민등록번호가 아닐 경우 null을 반환
  157. *
  158. */
  159. public static function verifyIdCard10($idCard) {
  160. $info = array ();
  161. $card = str_replace ( "[\(|\)]", "", $card );
  162. $len = strlen ( $card );
  163. if ($len != 8 && $len ! = 9 && $len != 10) {
  164. return null;
  165. }
  166. if (0 < preg_match ( "/^[a-zA-Z][0-9]{9}$/", $idCard )) { // 台湾
  167. $info [0] = "台湾";
  168. $char2 = substr ( $idCard, 1, 1 );
  169. if ($char2 == "1") {
  170. $info [1] = "M";
  171. } else if ($char2 == " 2") {
  172. $info [1] = "F";
  173. } else {
  174. $info [1] = "N";
  175. $info [2] = "false";
  176. return $info;
  177. }
  178. $info [2] = self::validateTWCard ( $idCard ) ? "true" : "false";
  179. } else if (0 < preg_match ( "/^[1|5|7][0-9]{6}\(?[0-9A-Z]\) ?$/", $idCard )) { // 澳门
  180. $info [0] = "澳门";
  181. $info [1] = "N";
  182. // TODO
  183. } else if (0 < preg_match ( "/^[A-Z]{1,2}[0-9]{6}\(?[0-9A]\)?$/", $idCard )) { // 향港
  184. $info [0] = "향港";
  185. $info [1] = "N";
  186. $info [2] = self::validateHKCard ( $idCard ) ? "true" : "false";
  187. } else {
  188. null 반환;
  189. }
  190. 정보 반환;
  191. }
  192. /**
  193. * 대만 신분증 번호 확인
  194. *
  195. * @param string idCard 신분증 번호
  196. * @return 확인 코드가 일치합니다
  197. */
  198. 공개 정적 함수 verifyTWCard($idCard) {
  199. $start = substr( $idCard, 0, 1 );
  200. $mid = substr( $idCard, 1, 8 );
  201. $end = substr( $idCard, 9, 1 );
  202. $iStart = self::$twFirstCode ['start'];
  203. $sum = $iStart / 10 ($iStart % 10) * 9;
  204. $chars = str_split ( $mid );
  205. $iflag = 8;
  206. foreach ( $chars as $c ) {
  207. $sum = $sum $c "" * $iflag;
  208. $iflag --;
  209. }
  210. return ($sum % 10 == 0 ? 0 : (10 - $sum % 10)) == $end ? true : false;
  211. }
  212. /**
  213. * 홍콩 신분증 번호 확인(버그 있음, 일부 특수 신분증은 확인 불가)
  214. *

  215. * 신분증 앞 2자리는 영문이면 됩니다. 첫 번째 숫자는 공백이며 숫자 58에 해당합니다. 처음 두 개의 영어 문자 A-Z는 숫자 10-35에 해당합니다
  216. * 체크 코드의 마지막 숫자는 0-9에 해당 숫자를 더한 것입니다. 문자 "A", "A"는 10을 나타냅니다.
  217. *

  218. *

  219. * 모든 ID 번호를 숫자로 변환합니다. 이 숫자는 9-1을 곱한 값의 합에 해당합니다. 11로 나누면 유효한 ID번호
  220. *

  221. *
  222. * @param idCard ID번호
  223. * @return 인증번호가 일치합니다
  224. */
  225. 공개 정적 함수 verifyHKCard($idCard) {
  226. $card = str_replace ( "[\(|\)] ", "", $card );
  227. $sum = 0;
  228. if (strlen ( $card ) == 9) {
  229. $card0_arr = str_split ( strtoupper ( substr ( $card, 0, 1 ) ) );
  230. $card1_arr = str_split ( strtoupper ( substr ( $card, 1, 1 ) ) );
  231. $sum = ($card0_arr [0] - 55) * 9 . ($card1_arr [0] - 55) * 8;
  232. $card = substr ( $card, 1, 8 );
  233. } else {
  234. $card0_arr = str_split ( strtoupper ( substr ( $card, 0) , 1 ) ) );
  235. $sum = 522 ($card0_arr [0] - 55) * 8;
  236. }
  237. $mid = substr( $card, 1, 6 );
  238. $end = substr( $card, 7, 1 );
  239. $chars = str_split( $mid );
  240. $iflag = 7;
  241. foreach ( $chars as $c ) {
  242. $sum = $sum $c "" * $iflag;
  243. $iflag --;
  244. }
  245. if (strtoupper ( $ end ) == "A") {
  246. $sum = $sum 10;
  247. } else {
  248. $sum = $sum $end;
  249. }
  250. return ($sum % 11 = = 0) ? true : false;
  251. }
  252. /**
  253. * ID 번호를 기준으로 나이 가져오기
  254. *
  255. * @param string idCard ID 번호
  256. * @return age
  257. */
  258. 공개 정적 함수 getAgeByIdCard($idCard) {
  259. $iAge = 0;
  260. if (strlen ( $ idCard ) == self::CHINA_ID_MIN_LENGTH) {
  261. $idCard = self::conver15CardTo18 ( $idCard );
  262. }
  263. $year = substr ( $idCard, 6, 4 );
  264. $iCurrYear = 날짜( 'Y', 시간() );
  265. $iAge = $iCurrYear - $year;
  266. return $iAge;
  267. }
  268. /**
  269. * ID 번호를 기준으로 생일 가져오기
  270. *
  271. * @param string $idCard ID 번호
  272. * @return NULL 문자열
  273. */
  274. 공개 정적 함수 getDateByIdCard($idCard) {
  275. $len = strlen ( $idCard );
  276. if ($len < self::CHINA_ID_MIN_LENGTH) {
  277. null 반환;
  278. } else if ($len == CHINA_ID_MIN_LENGTH) {
  279. $idCard = self::conver15CardTo18 ( $idCard );
  280. }
  281. return substr ( $idCard, 12, 2 );
  282. }
  283. /**
  284. * ID 번호를 기준으로 성별 가져오기
  285. *
  286. * @param string $idCard ID 번호
  287. * @return 성별(M-남성, F-여성, N-알 수 없음)
  288. */
  289. 공개 정적 함수 getGenderByIdCard($idCard) {
  290. $sGender = "N";
  291. if (strlen ( $idCard ) == self::CHINA_ID_MIN_LENGTH) {
  292. $idCard = self::conver15CardTo18 ( $idCard );
  293. }
  294. $sCardNum = substr ( $idCard, 16, 1 );
  295. if (( int ) $sCardNum % 2 != 0) {
  296. $sGender = "M";
  297. } else {
  298. $sGender = "F";
  299. }
  300. return $sGender;
  301. }
  302. /* *
  303. * 주민등록번호를 기준으로 호적도 구하기
  304. *
  305. * @param string $idCard 주민등록번호
  306. * @return string
  307. */
  308. 공개 정적 함수 getProvinceByIdCard($idCard) {
  309. $len = strlen( $idCard );
  310. $sProvince = null;
  311. $sProvinNum = "";
  312. if ($len == self::CHINA_ID_MIN_LENGTH || $len == self::CHINA_ID_MAX_LENGTH) {
  313. $sProvinNum = substr ( $idCard, 0, 2 );
  314. }
  315. $sProvince = self::$cityCodes [$sProvinNum];
  316. return $sProvince;
  317. }
  318. /**
  319. * 숫자 검증
  320. *
  321. * @param int $val
  322. */
  323. 공개 정적 함수 isNum($val) {
  324. return $val == null || $val == "" ? 거짓: 0 < preg_match ( '/^[0-9]*$/', $val );
  325. }
  326. /**
  327. * 날짜가 현재 날짜보다 작을 경우 유효한지 확인
  328. *
  329. * @param int $iYear 확인할 날짜(연도)
  330. * @param int $iMonth 확인할 날짜 확인(1~12월)
  331. * @param int $iDate 확인 날짜(일)
  332. * @return 유효한지 여부
  333. */
  334. 공개 정적 함수 valiDate($iYear, $iMonth , $iDate) {
  335. $연도 = 날짜 ( 'Y', 시간 () );
  336. if ($iYear < self::MIN || $iYear >= $year) {
  337. return false;
  338. }
  339. if ($iMonth < 1 || $iMonth > 12) {
  340. return false;
  341. }
  342. 스위치($iMonth) {
  343. 사례 4:
  344. 사례 6 :
  345. 사례 9 :
  346. 사례 11 :
  347. $datePerMonth = 30;
  348. break;
  349. 사례 2 :
  350. $dm = (($iYear % 4 = = 0 && $iYear % 100 != 0) || ($iYear % 400 == 0)) && ($iYear > self::MIN && $iYear < $year);
  351. $datePerMonth = $dm ? 29 : 28;
  352. 휴식;
  353. 기본값 :
  354. $datePerMonth = 31;
  355. }
  356. return ($iDate >= 1) && ($iDate <= $datePerMonth);
  357. }
  358. /**
  359. * 将身份证的每位和对应位的加权因子乘之后,再得到和值
  360. *
  361. * @param 배열 $iArr
  362. * @return 身份证编码。
  363. */
  364. 개인 정적 함수 getPowerSum($iArr) {
  365. $iSum = 0;
  366. $power_len = count ( self::$power );
  367. $iarr_len = count ( $iArr );
  368. if ($power_len == $iar_len) {
  369. for($i = 0; $i < $iarr_len; $i ) {
  370. for($j = 0; $j < $power_len; $j ) {
  371. if ($i == $j) {
  372. $iSum = $iSum $iArr [$i] * self::$power [$j];
  373. }
  374. }
  375. }
  376. }
  377. return $iSum;
  378. }
  379. /**
  380. * 검사 코드 판단을 위해 11의 거듭제곱 합계 값을 취하여 나머지를 구합니다
  381. *
  382. * @param int $iSum
  383. * @return 검사 숫자
  384. */
  385. 비공개 정적 함수 getCheckCode18($iSum) {
  386. $sCode = "";
  387. 스위치 ($iSum % 11) {
  388. 사례 10 :
  389. $sCode = "2";
  390. 중단;
  391. 사례 9 :
  392. $sCode = "3";
  393. 중단;
  394. 사례 8 :
  395. $sCode = "4";
  396. 중단;
  397. 사례 7:
  398. $sCode = "5";
  399. break;
  400. 사례 6 :
  401. $sCode = "6";
  402. break;
  403. 사례 5 :
  404. $sCode = "7";
  405. break;
  406. 사례 4:
  407. $sCode = "8";
  408. 중단;
  409. 사례 3 :
  410. $sCode = "9";
  411. 중단;
  412. 사례 2:
  413. $sCode = "x ";
  414. 중단;
  415. 사례 1 :
  416. $sCode = "0";
  417. 중단;
  418. 사례 0 :
  419. $sCode = "1";
  420. 중단;
  421. }
  422. $sCode 반환;
  423. }
  424. }
复代码


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn