با سلام مجدد من جستجو کردم و در چند سایت این الگوریتم رو دیدم به ویژه انجمن پی اچ پی گروپ که عینا درج میکنم .
روش اعتبار سنجی کد ملی :
دهمین رقم شماره ملی را ( از سمت چپ ) به عنوان A در نظر می گیریم.
یک مقدار B در نظر می گیریم و آن را برابر با :
(اولین رقم * ۱۰) + ( دومین رقم * ۹ ) + ( سومین رقم * ۸ ) + ( چهارمین رقم * ۷ ) + ( پنجمین رقم * ۶) + ( ششمین رقم * ۵ ) + ( هفتمین رقم * ۴ ) + ( هشتمین رقم * ۳ ) + ( نهمین رقم * ۲ )
قرار می دهیم.
مقدار Cرا برابر با B – (B/11)*11 قرار می دهیم.
اگر مقدار Cبرابر با صفر باشد و مقدار Aبرابر Cباشد کد ملی صحیح است.
اگر مقدار Cبرابر با ۱ باشد و مقدار Aبرابر با ۱ باشد کد ملی صحیح است.
اگر مقدار Cبزرگتر از ۱ باشد و مقدار A برابر با ۱۱ – Cباشد کد ملی صحیح است.
همینطور یک کلاس که جناب آقای رضا شعاری نوشته بودند اینجا قرار میدم امیدوارم مفید باشه.
کد PHP:
<?php
/** * In the name of God * * Validate National Iranian Code * * @package melliCode * @version 1.0.0 mellicode.class.php Wednesday, January 12, 2011 * @author Reza Sheari * @web http://www.Vvolf.net * @email r.sheari@gmail.com */
class melliCode{ /** * Hold National Code * * @access Protected * @var Integer */ protected static $nationalCode = int;
/** * Incorrect List * * @access Protected * @var Integer */ protected static $notNationalCode = array( "1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666", "7777777777", "8888888888", "9999999999", "0000000000");
/** * Construct * * @access Public * @var Empty */ public function __construct() { }
/** * National Validation Code * * @access Public * @var Integer */ public function nationalCode($code) { self::$nationalCode = trim($code);
if(self::validCode()) { $melliCode = self::$nationalCode;
$subMid = self::subMidNumbers($melliCode, 10, 1);
$getNum = 0;
for($i = 1; $i < 10; $i++) $getNum += (self::subMidNumbers($melliCode, $i, 1) * (11 - $i));
$modulus = ($getNum % 11);
if((($modulus < 2) && ($subMid == $modulus)) || (($modulus >= 2) && ($subMid == (11 - $modulus)))) return true; }
return false; }
/** * Validate * * @access Protected * @var Boolean */ protected function validCode() { $melliCode = self::$nationalCode;
if((is_numeric($melliCode)) && (strlen($melliCode) == 10) && (strspn($melliCode, $melliCode[0]) != strlen($melliCode))) return true;
return false; }
/** * Get Portion of String Specified * * @access Protected * @var Integer */ protected function subMidNumbers($number, $start, $length) { $number = substr($number, ($start - 1), $length);
return $number; }}
?>