Overview

Namespaces

  • None
  • Wei
    • Validator

Classes

  • Wei\Validator\All
  • Wei\Validator\AllOf
  • Wei\Validator\Alnum
  • Wei\Validator\Alpha
  • Wei\Validator\BaseValidator
  • Wei\Validator\Between
  • Wei\Validator\Blank
  • Wei\Validator\Callback
  • Wei\Validator\CharLength
  • Wei\Validator\Chinese
  • Wei\Validator\Color
  • Wei\Validator\Contains
  • Wei\Validator\CreditCard
  • Wei\Validator\Date
  • Wei\Validator\DateTime
  • Wei\Validator\Decimal
  • Wei\Validator\Digit
  • Wei\Validator\Dir
  • Wei\Validator\DivisibleBy
  • Wei\Validator\DoubleByte
  • Wei\Validator\Email
  • Wei\Validator\EndsWith
  • Wei\Validator\EqualTo
  • Wei\Validator\Exists
  • Wei\Validator\FieldExists
  • Wei\Validator\File
  • Wei\Validator\GreaterThan
  • Wei\Validator\GreaterThanOrEqual
  • Wei\Validator\IdCardCn
  • Wei\Validator\IdCardHk
  • Wei\Validator\IdCardMo
  • Wei\Validator\IdCardTw
  • Wei\Validator\IdenticalTo
  • Wei\Validator\Image
  • Wei\Validator\In
  • Wei\Validator\Ip
  • Wei\Validator\Length
  • Wei\Validator\LessThan
  • Wei\Validator\LessThanOrEqual
  • Wei\Validator\Lowercase
  • Wei\Validator\Luhn
  • Wei\Validator\MaxLength
  • Wei\Validator\MinLength
  • Wei\Validator\MobileCn
  • Wei\Validator\NaturalNumber
  • Wei\Validator\NoneOf
  • Wei\Validator\Null
  • Wei\Validator\Number
  • Wei\Validator\OneOf
  • Wei\Validator\Password
  • Wei\Validator\Phone
  • Wei\Validator\PhoneCn
  • Wei\Validator\PlateNumberCn
  • Wei\Validator\PositiveInteger
  • Wei\Validator\PostcodeCn
  • Wei\Validator\Present
  • Wei\Validator\QQ
  • Wei\Validator\RecordExists
  • Wei\Validator\Regex
  • Wei\Validator\Required
  • Wei\Validator\SomeOf
  • Wei\Validator\StartsWith
  • Wei\Validator\Time
  • Wei\Validator\Tld
  • Wei\Validator\Type
  • Wei\Validator\Uppercase
  • Wei\Validator\Url
  • Wei\Validator\Uuid
  • Overview
  • Namespace
  • Function
 1: <?php
 2: /**
 3:  * Wei Framework
 4:  *
 5:  * @copyright   Copyright (c) 2008-2015 Twin Huang
 6:  * @license     http://opensource.org/licenses/mit-license.php MIT License
 7:  */
 8: 
 9: namespace Wei\Validator;
10: 
11: /**
12:  * Check if the input is valid Taiwan identity card
13:  *
14:  * @author      Twin Huang <twinhuang@qq.com>
15:  * @link        http://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89
16:  */
17: class IdCardTw extends BaseValidator
18: {
19:     protected $invalidMessage = '%name% must be valid Taiwan identity card';
20: 
21:     protected $negativeMessage = '%name% must not be valid Taiwan identity card';
22: 
23:     protected $map = array(
24:         'A' => 10,
25:         'B' => 11,
26:         'C' => 12,
27:         'D' => 13,
28:         'E' => 14,
29:         'F' => 15,
30:         'G' => 16,
31:         'H' => 17,
32:         'I' => 34,
33:         'J' => 18,
34:         'K' => 19,
35:         'M' => 21,
36:         'N' => 22,
37:         'O' => 35,
38:         'P' => 23,
39:         'Q' => 24,
40:         'T' => 27,
41:         'U' => 28,
42:         'V' => 29,
43:         'W' => 32,
44:         'X' => 30,
45:         'Z' => 33,
46:         'L' => 20,
47:         'R' => 25,
48:         'S' => 26,
49:         'Y' => 31
50:     );
51: 
52:     /**
53:      * {@inheritdoc}
54:      */
55:     protected function doValidate($input)
56:     {
57:         if (!$this->isString($input)) {
58:             $this->addError('notString');
59:             return false;
60:         }
61: 
62:         if (10 != strlen($input)) {
63:             $this->addError('invalid');
64:             return false;
65:         }
66: 
67:         $input = strtoupper($input);
68: 
69:         // Validate the city letter, should be A-Z
70:         $first = ord($input[0]);
71:         if ($first <  65 || $first > 90) {
72:             $this->addError('invalid');
73:             return false;
74:         }
75: 
76:         // Validate the gender
77:         if ($input[1] != '1' && $input[1] != '2') {
78:             $this->addError('invalid');
79:             return false;
80:         }
81: 
82:         list($x1, $x2) = str_split((string)$this->map[$input[0]]);
83:         $sum = $x1 + 9 * $x2;
84:         for ($i = 1, $j = 8; $i < 9; $i++, $j--) {
85:             $sum += $input[$i] * $j;
86:         }
87:         $sum += $input[9];
88: 
89:         if (0 !== $sum % 10) {
90:             $this->addError('invalid');
91:             return false;
92:         }
93: 
94:         return true;
95:     }
96: }
97: 
Wei Framework API documentation generated by ApiGen