Skip to content

Instantly share code, notes, and snippets.

@geminorum
Last active July 30, 2019 14:13
Show Gist options
  • Save geminorum/dcf63d776efef3aa49c7dfff06d6129d to your computer and use it in GitHub Desktop.
Save geminorum/dcf63d776efef3aa49c7dfff06d6129d to your computer and use it in GitHub Desktop.
شناسه ملی شرکت
<?php
// @REF: https://github.com/DevRoomOrg/ircheck/issues/1#issuecomment-348672401
// @REF: http://www.aliarash.com/article/shenasameli/shenasa_meli.htm
function checkNationalCode($nationalCode) {
if (strlen($nationalCode) != 11)
return false;
$c = intval(substr($nationalCode, 10, 1));
$dahganPlusTwo = intval(substr($nationalCode, 9, 1)) + 2;
$n= (intval(substr($nationalCode, 0, 1)) + $dahganPlusTwo) * 29 +
(intval(substr($nationalCode, 1, 1)) + $dahganPlusTwo) * 27 +
(intval(substr($nationalCode, 2, 1)) + $dahganPlusTwo) * 23 +
(intval(substr($nationalCode, 3, 1)) + $dahganPlusTwo) * 19 +
(intval(substr($nationalCode, 4, 1)) + $dahganPlusTwo) * 17 +
(intval(substr($nationalCode, 5, 1)) + $dahganPlusTwo) * 29 +
(intval(substr($nationalCode, 6, 1)) + $dahganPlusTwo) * 27 +
(intval(substr($nationalCode, 7, 1)) + $dahganPlusTwo) * 23 +
(intval(substr($nationalCode, 8, 1)) + $dahganPlusTwo) * 19 +
(intval(substr($nationalCode, 9, 1)) + $dahganPlusTwo) * 17;
$r = $n - intval($n / 11) * 11;
if($r == 10) $r = 0;
return $r == $c;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment