Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Class PersonalNumber
- *
- * @TODO calculate age?
- */
- class PersonalNumber
- {
- /**
- * @var int
- */
- protected $personalNumber = 0;
- /**
- * @var int
- *
- * 1 is woman, 2 is man
- */
- protected $gender = 0;
- /**
- * @var int
- */
- protected $isValid = 0;
- /**
- * @var int
- *
- * mostly used for immigrants as a temporary personal number
- * a D-number adds 4 to the first digit
- */
- protected $isDNumber = 0;
- /**
- * @var int
- *
- * used (mostly) in health care for patient journals
- * a H-number adds 4 to the third digit
- */
- protected $isHNumber = 0;
- /**
- * Check the validity of a personal number
- *
- * This function does not check if the personal number actually exists
- *
- * @param $personalNumber
- * @return mixed
- */
- public function checkPersonalNumber($personalNumber) {
- $this->personalNumber = $personalNumber;
- // return false if $personalNumber is empty
- if ( empty($personalNumber)) return false;
- // remove values that are not numbers
- $personalNumber = preg_replace('/[^0-9]/', '', $personalNumber);
- // control check k1
- $k1 = (3*$personalNumber[0] + 7*$personalNumber[1] + 6*$personalNumber[2] + 1*$personalNumber[3] + 8*$personalNumber[4] + 9*$personalNumber[5] + 4*$personalNumber[6] + 5*$personalNumber[7] + 2*$personalNumber[8]) % 11;
- $k1 = ($k1 == "0") ? 0 : 11-$k1;
- // control check k2
- $k2 = (5*$personalNumber[0] + 4*$personalNumber[1] + 3*$personalNumber[2] + 2*$personalNumber[3] + 7*$personalNumber[4] + 6*$personalNumber[5] + 5*$personalNumber[6] + 4*$personalNumber[7] + 3*$personalNumber[8] + 2*$k1) % 11;
- $k2 = ($k2 == "0") ? 0 : 11-$k2;
- // check if it is now just numbers, contains 11 digits and is a valid personal number
- if ( (preg_match('#[^0-9]#', $personalNumber)) || (strlen($personalNumber) != 11) || (($k1 != $personalNumber[9]) || ($k2 != $personalNumber[10])) ) return false;
- // if we got this far, the personal number is valid
- $this->isValid = true;
- // set gender value
- $this->gender = (($personalNumber[8] % 2) == 0) ? "1" : "2";
- // is this a D-number?
- $this->isDNumber = ($personalNumber[0] > 3) ? $personalNumber[0] - 4 : $personalNumber[0];
- // is this a H-number?
- $this->isHNumber = ($personalNumber[2] > 1) ? $personalNumber[2] - 4 : $personalNumber[2];
- // we've made it! Now we can return true
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement