ホームページ >バックエンド開発 >PHPチュートリアル >PHPのIDカード番号ツールクラスをJavaに翻訳

PHPのIDカード番号ツールクラスをJavaに翻訳

WBOY
WBOYオリジナル
2016-07-25 08:50:59882ブラウズ
15 桁から 18 桁の ID 番号への変換を実現し、中国本土住民 ID カード、香港住民 ID カード、マカオ ID カード、台湾 ID カードを検証します。
  1. /**
  2. * ID カード ツール カテゴリ
  3. *
  4. * @author Tongle Xu 2013-6-6
  5. * @copyright Copyright (c) 2003-2103 tinysoft.com
  6. * @license http://www .tintsoft.com
  7. * @version $Id$
  8. */
  9. class Utils_Idcard {
  10. /**
  11. * 中国国民 ID 番号の最小の長さ。
  12. */
  13. const CHINA_ID_MIN_LENGTH = 15;
  14. /**
  15. * 中国国民 ID 番号の最大長。
  16. */
  17. const CHINA_ID_MAX_LENGTH = 18;
  18. /**
  19. * 最低年数
  20. */
  21. const MIN = 1930;
  22. /**
  23. *都道府県および市区町村コード表
  24. */
  25. 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" );
  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 = array ("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桁のIDコード
  42. * @return 18桁のIDコード
  43. */
  44. public static function conver15CardTo18($idCard) {
  45. $ idCard18 = "";
  46. if (strlen ( $idCard ) != self::CHINA_ID_MIN_LENGTH) {
  47. return null;
  48. }
  49. if (self::isNum ( $idCard )) {
  50. // 获取警戒
  51. $ s年 = '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. return null;
  63. }
  64. }
  65. } else {
  66. return null;
  67. }
  68. return $idCard18;
  69. }
  70. /**
  71. * IDカードが合法かどうかを確認してください
  72. */
  73. public static function validateCard($idCard) {
  74. $card = trim ( $idCard );
  75. if ( self::validateIdCard18 ( $card )) {
  76. return true;
  77. }
  78. if (self::validateIdCard15 ( $card )) {
  79. return true;
  80. }
  81. return false;
  82. }
  83. /**
  84. * 18 桁の ID コードが合法かどうかを確認します
  85. *
  86. * @param int $idCard ID コード
  87. * @return boolean 合法かどうかを確認します
  88. * /
  89. public static function validateIdCard18($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 桁の ID コードが合法かどうかを確認します
  112. *
  113. * @param string $idCard ID コード
  114. * @return boolean 合法かどうかを確認します
  115. */
  116. public static function validateIdCard15($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. return false;
  130. }
  131. return true;
  132. }
  133. /**
  134. * ID 番号に基づいて年齢を取得します
  135. *
  136. * @param string idCard ID 番号
  137. * @return age
  138. */
  139. public static function 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. $iCurr Year = date ( 'Y ', time () );
  146. $iAge = $iCurr Year - $year;
  147. return $iAge;
  148. }
  149. /**
  150. * ID 番号に基づいて誕生日を取得します
  151. *
  152. * @param string $idCard ID 番号
  153. * @return NULL string
  154. */
  155. public static function 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. public static function 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. * ID 番号に基づいて戸籍の都道府県を取得します
  185. *
  186. * @param string $idCard ID 番号
  187. * @return string
  188. */
  189. public static function 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. public static function isNum($val) {
  205. return $val == null || $val == "" ? false : 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. public static function valiDate($i Year, $iMonth, $iDate) {
  216. $year = date ( 'Y', time () );
  217. if ($iyear < self::MIN || $i Year >= $year) {
  218. return false;
  219. }
  220. if ($iMonth < 1 || $iMonth > 12) {
  221. return false;
  222. }
  223. switch ($iMonth) {
  224. ケース 4 :
  225. ケース 6 :
  226. ケース 9 :
  227. ケース 11 :
  228. $datePerMonth = 30;
  229. ブレーク;
  230. ケース 2 :
  231. $dm = (($i年 % 4 == 0 && $i年 % 100 != 0) || ($i年 % 400 == 0)) && ($i年 > self::MIN && $i年 < $年);
  232. $datePerMonth = $dm ? 29 : 28;
  233. ブレーク;
  234. デフォルト :
  235. $datePerMonth = 31;
  236. }
  237. return ($iDate >= 1) && ($iDate }
  238. /**
  239. * IDカードの各ビットと対応するビットの重み係数を乗算した後、合計値が得られます
  240. *
  241. * @param array $iArr
  242. * @return ID code.
  243. * /
  244. プライベート静的関数 getPowerSum($iArr) {
  245. $iSum = 0;
  246. $power_len = count ( self::$power );
  247. $iarr_len = count ( $iArr );
  248. if ($power_len == $iarr_len) {
  249. for($i = 0; $i for($j = 0; $j if ($i == $j) {
  250. $iSum = $iSum + $iArr [$i] * self::$power [$j];
  251. }
  252. }
  253. }
  254. }
  255. return $iSum;
  256. }
  257. /**
  258. * 累乗和の11を法とした値を求め、チェックデジット判定用の余りを求めます
  259. *
  260. * @param int $iSum
  261. * @return check digit
  262. */
  263. プライベート静的関数 getCheckCode18($iSum) {
  264. $sCode = "";
  265. switch ($iSum % 11) {
  266. case 10 :
  267. $sCode = "2";
  268. Break;
  269. case 9 :
  270. $ sCode = "3";
  271. ブレーク;
  272. ケース 8 :
  273. $sCode = "4";
  274. ブレーク;
  275. ケース 7 :
  276. $sCode = "5";
  277. ブレーク;
  278. ケース 6 :
  279. $sCode = "6" ;
  280. ブレーク;
  281. ケース 5 :
  282. $sCode = "7";
  283. ブレーク;
  284. ケース 4 :
  285. $sCode = "8";
  286. ブレーク;
  287. ケース 3 :
  288. $sCode = "9";
  289. ブレーク;
  290. ケース 2 :
  291. $sCode = "x";
  292. ブレーク;
  293. ケース 1 :
  294. $sCode = "0";
  295. ブレーク;
  296. ケース 0 :
  297. $sCode = "1";
  298. ブレーク;
  299. }
  300. return $sCode ;
  301. }
  302. }
复制代
  1. /**
  2. * ID カード ツール カテゴリ
  3. *
  4. * @author Tongle Xu 2013-6-6
  5. * @copyright Copyright (c) 2003-2103 tinysoft.com
  6. * @license http://www .tintsoft.com
  7. * @version $Id$
  8. */
  9. class Utils_Idcard {
  10. /**
  11. * 中国国民 ID 番号の最小の長さ。
  12. */
  13. const CHINA_ID_MIN_LENGTH = 15;
  14. /**
  15. * 中国国民 ID 番号の最大長。
  16. */
  17. const CHINA_ID_MAX_LENGTH = 18;
  18. /**
  19. * 最低年数
  20. */
  21. const MIN = 1930;
  22. /**
  23. *都道府県および市区町村コード表
  24. */
  25. 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" );
  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 = array ("1","0","X","9","8","7","6","5","4","3","2" );
  34. /**
  35. *国内身分証明書の確認
  36. */
  37. public static $cityCodes = array ('11' => '北京','12' => '天津','13' => '河北','14' => '山西','15' => '内モンゴル','22' => '吉林','23' => ' => '上海','32' => '浙江','34' => '福建' ' => '江西','37' => '河南','42' => '湖南','44 ' => '広東','45' => '46' => '重慶','51' => 52 ' => '貴州'、'53' => 'チベット'、'62' => ' 15 ' => '内モンゴル'、'21' => '吉林'、'23' => '上海'、 '32' => '江蘇'、'33' => '安徽'、'35' => '江西'、 '37' => '山東'、'41' => '湖北'、'43' => '広東' 、' 45' => '広西'、' 46' => '重慶'、' 51' => '貴州' 、' 53' => '雲南'、' 54' => '陝西省'、' 63' => 、' 64' => '寧夏'、' 65' => '台湾'、' 82' => ',' 91' => '海外','63' => '寧夏','71' => ',' 81' => '香港',
  38. '82' => 'マカオ','91' => '海外' );
  39. /**
  40. *台湾 ID カード認証
  41. *
  42. * @var array
  43. */
  44. public static $twFirstCode = 配列 (' A' => 10,'B' => 11,'C' => 12,'D' => 13,'E' => 14,'F' => 15 、'G' => 16、'H' => 18、'L' => 21、' N' => 22、'P' => 24、'S' => 27、'U' => 28、'V' => 30、'W' => 33、'I' => ; 34,' O' => 35 );
  45. /**
  46. * 香港のIDカード認証
  47. */
  48. public static $hkFirstCode = array ('A' => 1,'B' => 2,'C' = > 3、'R' => 21、'X' => 23、'O' => 15,'N ' => 14 );
  49. /**
  50. * 15桁のID番号を18桁に変換します
  51. *
  52. * @param idCard 15桁のIDコード
  53. * @return 18桁のIDコード
  54. */
  55. public static function conver15CardTo18($idCard) {
  56. $idCard18 = "";
  57. if (strlen ( $idCard ) != self: :CHINA_ID_MIN_LENGTH) {
  58. return null;
  59. }
  60. if (self::isNum ( $idCard )) {
  61. // 生まれた年、月、日を取得します
  62. $s Year = '19' . substr ( $idCard, 6, 2 );
  63. $idCard18 = substr ( $idCard, 0, 6 ) . $s Year . substr ( $idCard, 8 );
  64. // 文字配列を変換します
  65. $iArr = str_split ( $idCard18 );
  66. if ($iArr ! = null) {
  67. $iSum17 = self::getPowerSum ( $iArr );
  68. // チェックデジットを取得します
  69. $sVal = self::getCheckCode18 ( $iSum17 );
  70. if (strlen ( $sVal ) > 0) {
  71. $idCard18 .= $sVal;
  72. } else {
  73. return null;
  74. }
  75. }
  76. } else {
  77. return null;
  78. }
  79. return $idCard18;
  80. }
  81. /**
  82. * IDカードが合法かどうかを確認してください
  83. */
  84. public 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. false を返します;
  99. }
  100. /**
  101. * 18 桁の ID コードが合法かどうかを確認します
  102. *
  103. * @param int $idCard ID コード
  104. * @return boolean 合法かどうかを確認します
  105. */
  106. public static function validateIdCard18($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 桁の ID コードが合法かどうかを確認します
  129. *
  130. * @param string $idCard ID コード
  131. * @return boolean 合法かどうかを確認します
  132. */
  133. public static function validateIdCard15($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 桁の ID コードが合法かどうかを確認してください
  152. *
  153. * @param idCard ID コード
  154. * @return ID カード情報配列

  155. * [0] - 台湾、マカオ、香港 [1] - 性別 (男性 M、女性 F、不明 N) [2] - 合法か (合法的 true、合法的 false ではない)
  156. * ID 番号でない場合は、null を返します
  157. *

  158. */
  159. public static function validateIdCard10($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 $info [0] = "台湾";
  167. $char2 = substr ( $ idCard, 1, 1 );
  168. if ($char2 == "1") {
  169. $info [1] = "M";
  170. } else if ($char2 == "2") {
  171. $info [1] = "F";
  172. } else {
  173. $info [1] = "N";
  174. $info [2] = "false";
  175. return $info;
  176. }
  177. $info [2] = self::validateTWCard ( $idCard )? "true" : "false";
  178. } else if (0 $info [0] = "澳门";
  179. $info [1] = "N";
  180. // TODO
  181. } else if (0 $info [0] = "香港";
  182. $info [1] = "N";
  183. $info [2] = self::validateHKCard ( $idCard ) ? "true" : "false";
  184. } else {
  185. return null;
  186. }
  187. return info;
  188. }
  189. /**
  190. * 台湾 ID カード番号を確認します
  191. *
  192. * @param string idCard ID カード番号
  193. * @return 確認コードが一致しています
  194. */
  195. public static function validateTWCard($idCard) {
  196. $start = substr ( $idCard, 0, 1 );
  197. $mid = substr ( $idCard, 1, 8 );
  198. $end = substr ( $idCard, 9, 1 );
  199. $iStart = self::$twFirstCode ['start'] ;
  200. $sum = $iStart / 10 + ($iStart % 10) * 9;
  201. $chars = str_split ( $mid );
  202. $iflag = 8;
  203. foreach ( $chars as $c ) {
  204. $sum = $ sum + $c + "" * $iflag;
  205. $iflag --;
  206. }
  207. return ($sum % 10 == 0 ? 0 : (10 - $sum % 10)) == $end ? true : false;
  208. }
  209. /**
  210. * 香港 ID カード番号を確認します (バグがあり、一部の特殊な ID カードは確認できません)
  211. *

  212. * ID カードの最初の 2 桁は英語です。英語の文字が 1 文字だけ表示されている場合は、それが英語です。最初の数字がスペースであることを意味し、数字の 58 に対応し、最初の 2 つの英語の文字 A ~ Z はそれぞれ 10 ~ 35 の数字に対応します
  213. * チェック コードの最後の数字は、0 ~ 9 に文字「A」、「A」を加えたものです。 " は 10 を表します
  214. *

  215. *

    * @return 認証コードが一致するかどうか

  216. */
  217. public static function validateHKCard($idCard) {
  218. $card = str_replace ( "[\(|\)]", "", $card );
  219. $sum = 0;
  220. if (strlen ( $card ) == 9) {
  221. $card0_arr = str_split ( strtoupper ( substr ( $card, 0, 1 ) ) );
  222. $card1_arr = str_split ( strtoupper ( substr ( $card , 1, 1 ) ) );
  223. $sum = ($card0_arr [0] - 55) * 9 。 ($card1_arr [0] - 55) * 8;
  224. $card = substr ( $card, 1, 8 );
  225. } else {
  226. $card0_arr = str_split ( strtoupper ( substr ( $card, 0, 1 ) ) );
  227. $sum = 522 + ($card0_arr [0] - 55) * 8;
  228. }
  229. $mid = substr ( $card, 1, 6 );
  230. $end = substr ( $card, 7, 1 );
  231. $chars = str_split ( $mid );
  232. $iflag = 7;
  233. foreach ( $chars as $c ) {
  234. $sum = $sum + $c + "" * $iflag;
  235. $iflag --;
  236. }
  237. if (strtoupper ( $end ) == "A") {
  238. $sum = $sum + 10;
  239. } else {
  240. $sum = $sum + $end;
  241. }
  242. return ($sum % 11 == 0) ? true : false;
  243. }
  244. /**
  245. * ID 番号に基づいて年齢を取得します
  246. *
  247. * @param string idCard ID 番号
  248. * @return age
  249. */
  250. public static function getAgeByIdCard($idCard) {
  251. $iAge = 0;
  252. if (strlen ( $idCard ) == self::CHINA_ID_MIN_LENGTH) {
  253. $ idCard = self::conver15CardTo18 ( $idCard );
  254. }
  255. $year = substr ( $idCard, 6, 4 );
  256. $iCurr Year = date ( 'Y', time () );
  257. $iAge = $iCurryear - $ year;
  258. return $iAge;
  259. }
  260. /**
  261. * ID 番号に基づいて誕生日を取得します
  262. *
  263. * @param string $idCard ID 番号
  264. * @return NULL string
  265. */
  266. public static function getDateByIdCard($idCard) {
  267. $len = strlen ( $idCard );
  268. if ($len < self::CHINA_ID_MIN_LENGTH ) {
  269. return null;
  270. } else if ($len == CHINA_ID_MIN_LENGTH) {
  271. $idCard = self::conver15CardTo18 ( $idCard );
  272. }
  273. return substr ( $idCard, 12, 2 );
  274. }
  275. / **
  276. * ID 番号に基づいて性別を取得します
  277. *
  278. * @param string $idCard ID 番号
  279. * @return 性別 (M-男性、F-女性、N-不明)
  280. */
  281. public static function getGenderByIdCard($idCard) {
  282. $sGender = "N";
  283. if (strlen ( $idCard ) == self::CHINA_ID_MIN_LENGTH) {
  284. $idCard = self::conver15CardTo18 ( $idCard );
  285. }
  286. $sCardNum = substr ( $idCard, 16, 1 );
  287. if (( int ) $sCardNum % 2 != 0) {
  288. $sGender = "M";
  289. } else {
  290. $sGender = "F";
  291. }
  292. return $sGender;
  293. }
  294. /**
  295. * ID 番号に基づいて戸籍の都道府県を取得します
  296. *
  297. * @param string $idCard ID 番号
  298. * @return string
  299. */
  300. public static function getProvinceByIdCard($idCard) {
  301. $len = strlen ( $idCard );
  302. $sProvince = null;
  303. $sProvinNum = "";
  304. if ($len == self::CHINA_ID_MIN_LENGTH || $len == self::CHINA_ID_MAX_LENGTH) {
  305. $sProvinNum = substr ( $idCard, 0, 2 );
  306. }
  307. $sProvince = self::$cityCodes [$sProvinNum];
  308. return $sProvince;
  309. }
  310. / **
  311. *番号認証
  312. *
  313. * @param int $val
  314. */
  315. public static function isNum($val) {
  316. return $val == null || $val == "" ? false : 0 <; preg_match ( '/^[0-9]*$/', $val );
  317. }
  318. /**
  319. * 現在の日付より小さい日付が有効かどうかを検証します
  320. *
  321. * @param int $iyear 検証する日付 (年)
  322. * @param int $iMonth 検証する日付 (月 1 ~ 12)
  323. * @param int $iDate 検証する日付 (日)
  324. * @return 有効ですか
  325. */
  326. public static function valiDate($i Year, $iMonth, $iDate) {
  327. $year = date ( 'Y', time () );
  328. if ($iyear < self::MIN || $i Year >= $year) {
  329. return false;
  330. }
  331. if ($iMonth < 1 || $iMonth > 12) {
  332. return false;
  333. }
  334. switch ($iMonth) {
  335. ケース 4 :
  336. ケース 6 :
  337. ケース 9 :
  338. ケース 11 :
  339. $datePerMonth = 30;
  340. ブレーク;
  341. ケース 2 :
  342. $dm = (($i年 % 4 == 0 && $i年 % 100 != 0) || ($i年 % 400 == 0)) && ($i年 > self::MIN && $i年 < $年);
  343. $datePerMonth = $dm ? 29 : 28;
  344. break;
  345. default:
  346. $datePerMonth = 31;
  347. }
  348. return ($iDate >= 1) && ($iDate }
  349. /**
  350. * 将身份承認された各ビットと対のビットの追加係数の後に、値
  351. *
  352. * @param array $iArr
  353. * @return 自身のコードが再び得られます。
  354. */
  355. プライベート静的関数 getPowerSum($iArr) {
  356. $iSum = 0;
  357. $power_len = count ( self::$power );
  358. $iarr_len = count ( $iArr );
  359. if ($power_len == $ iarr_len) {
  360. for($i = 0; $i < $iarr_len; $i ++) {
  361. for($j = 0; $j < $power_len; $j ++) {
  362. if ($i == $j) {
  363. $iSum = $iSum + $iArr [$i] * self::$power [$j];
  364. }
  365. }
  366. }
  367. }
  368. return $iSum;
  369. }
  370. /**
  371. * 累乗和の11を法とした値を求め、チェックデジット判定用の余りを求めます
  372. *
  373. * @param int $iSum
  374. * @return check digit
  375. */
  376. プライベート静的関数 getCheckCode18($iSum) {
  377. $sCode = "";
  378. switch ($iSum % 11) {
  379. case 10 :
  380. $sCode = "2";
  381. Break;
  382. case 9 :
  383. $sCode = "3";
  384. ブレーク;
  385. ケース 8 :
  386. $sCode = "4";
  387. ブレーク;
  388. ケース 7 :
  389. $sCode = "5";
  390. ブレーク;
  391. ケース 6 :
  392. $sCode = " 6";
  393. ブレーク;
  394. ケース 5 :
  395. $sCode = "7";
  396. ブレーク;
  397. ケース 4 :
  398. $sCode = "8";
  399. ブレーク;
  400. ケース 3 :
  401. $sCode = "9";
  402. ブレーク;
  403. ケース 2 :
  404. $sCode = "x";
  405. ブレーク;
  406. ケース 1 :
  407. $sCode = "0";
  408. ブレーク;
  409. ケース 0 :
  410. $sCode = "1";
  411. ブレーク;
  412. }
  413. return $sCode;
  414. }
  415. }
复制代


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。