fara_server
August 21st, 2012, 13:30
سلام دوستان
مطلب زیر رو در سایت استاد کرامتی فر گرامی دیدم و گفتم خالی از لطف نیست اگر برای دوستان هم قرار بدم.در ذیل با نحوه اعتبار سنجی کد ملی کاربر در پی اچ پی آشنا خواهید شد.
+
همانطور که می دانید، کد ملی بعنوان یک شناسه ی منحصر به فرد (Unique ID) برای هر ایرانی محسوب می شود. در بعضی سایت ها ممکن است نیاز باشد تا کد ملی کاربر را بگیریم. بنابراین به الگوریتمی نیاز داریم تا بتوانیم از صحت کد ملی وارد شده توسط کاربر مطمئن شویم و در صورتیکه بصورت سهوی و یا عمدی اشتباه وارد شد، بتوانیم عملیات ثبت را متوقف کنیم و به کاربر اخطار دهیم.
در همین راستا، تابعی در php نوشتم که کد ملی وارد شده را می گیرد و صحت آنرا بررسی می کند. اما قبل از بررسی تابع لازم است توضیحاتی در مورد الگوریتم آن بدهم.
کد ملی یک شناسه ی 10 رقمی است که اعداد آن به سه دسته تقسیم می شوند:
1- 3 رقم اول کد محل زندگی
2- 6 رقم بعدی کد منحصر به فرد شخص
3- رقم آخر عدد کنترل (Validation Number)
الگوریتم Validation کد ملی بصورت ساده به این شرح است:
از سمت چپ هر عدد ضربدر ارزش مکانی مع*** خود می شود.
حاصل ضرب ها با هم جمع می شود.
باقیمانده تقسیم حاصل جمع ها بر عدد 11 را بدست می آوریم.
اگر عدد بدست آمده در باقیمانده ی تقسیم، کوچکتر مساوی 2 بود، همان عدد باید با Validation Number (عدد آخر کد ملی) برابر باشد.
اگر عدد بدست آمده در باقیمانده ی تقسیم، بزرگتر از 2 بود، عدد را منهای 11 می کنیم و نتیجه باید برابر Validation Number (عدد آخر کد ملی) باشد.
<?php
function CheckNationalCode($code)
{
if(strlen($code) <> 10){
echo 'کد ملی باید ده رقم باشد';
}
else
{
$codeArray = str_split($code);
$AllEq ;
foreach($codeArray as $item => $value)
{
if($codeArray[0] <> $value)
{
$AllEq = false;
break;
}
else{ $AllEq = true;}
}
if($AllEq == true) die('اعداد کد ملی نمی توانند برابر هم باشند');
$j = 10;
$sum = 0;
for($i=0; $i<=8; $i++)
{
$sum +=((int)($codeArray[$i])) * $j;
--$j;
}
$divid = $sum % 11;
if ($divid <= 2)
{
if($codeArray[9] == $divid)
{
echo "کد ملی معتبر است";
}
echo "کد ملی معتبر نیست";
}
else
{
$divid1 = 11 - $divid;
if ($codeArray[9] == $divid1)
{
echo "کد ملی معتبر است";
}
else
{
echo "کد ملی معتبر نیست";
}
}
}
}
?>
نحوه ی کار این کد به این صورت است که یک کد ملی (nccode) را توسط متد POST دریافت می کند و به تابع CheckNationalCode می دهد تا صحت آنرا بررسی کند.
این فانکشن را در قالب یک برنامه پی اچ پی که با استفاده از ajax کد ملی را Validat می کند، پیاده سازی کردم
دانلود نمونه برنامه (http://rapidshare.com/files/430817058/CheckNationalCode.rar)
مشاهده ی نمونه برنامه (http://keramatifar.ir/tests/enternc.php)
منبع : وب سایت جناب آقای کرامتی فر (http://keramatifar.ir)
مطلب زیر رو در سایت استاد کرامتی فر گرامی دیدم و گفتم خالی از لطف نیست اگر برای دوستان هم قرار بدم.در ذیل با نحوه اعتبار سنجی کد ملی کاربر در پی اچ پی آشنا خواهید شد.
+
همانطور که می دانید، کد ملی بعنوان یک شناسه ی منحصر به فرد (Unique ID) برای هر ایرانی محسوب می شود. در بعضی سایت ها ممکن است نیاز باشد تا کد ملی کاربر را بگیریم. بنابراین به الگوریتمی نیاز داریم تا بتوانیم از صحت کد ملی وارد شده توسط کاربر مطمئن شویم و در صورتیکه بصورت سهوی و یا عمدی اشتباه وارد شد، بتوانیم عملیات ثبت را متوقف کنیم و به کاربر اخطار دهیم.
در همین راستا، تابعی در php نوشتم که کد ملی وارد شده را می گیرد و صحت آنرا بررسی می کند. اما قبل از بررسی تابع لازم است توضیحاتی در مورد الگوریتم آن بدهم.
کد ملی یک شناسه ی 10 رقمی است که اعداد آن به سه دسته تقسیم می شوند:
1- 3 رقم اول کد محل زندگی
2- 6 رقم بعدی کد منحصر به فرد شخص
3- رقم آخر عدد کنترل (Validation Number)
الگوریتم Validation کد ملی بصورت ساده به این شرح است:
از سمت چپ هر عدد ضربدر ارزش مکانی مع*** خود می شود.
حاصل ضرب ها با هم جمع می شود.
باقیمانده تقسیم حاصل جمع ها بر عدد 11 را بدست می آوریم.
اگر عدد بدست آمده در باقیمانده ی تقسیم، کوچکتر مساوی 2 بود، همان عدد باید با Validation Number (عدد آخر کد ملی) برابر باشد.
اگر عدد بدست آمده در باقیمانده ی تقسیم، بزرگتر از 2 بود، عدد را منهای 11 می کنیم و نتیجه باید برابر Validation Number (عدد آخر کد ملی) باشد.
<?php
function CheckNationalCode($code)
{
if(strlen($code) <> 10){
echo 'کد ملی باید ده رقم باشد';
}
else
{
$codeArray = str_split($code);
$AllEq ;
foreach($codeArray as $item => $value)
{
if($codeArray[0] <> $value)
{
$AllEq = false;
break;
}
else{ $AllEq = true;}
}
if($AllEq == true) die('اعداد کد ملی نمی توانند برابر هم باشند');
$j = 10;
$sum = 0;
for($i=0; $i<=8; $i++)
{
$sum +=((int)($codeArray[$i])) * $j;
--$j;
}
$divid = $sum % 11;
if ($divid <= 2)
{
if($codeArray[9] == $divid)
{
echo "کد ملی معتبر است";
}
echo "کد ملی معتبر نیست";
}
else
{
$divid1 = 11 - $divid;
if ($codeArray[9] == $divid1)
{
echo "کد ملی معتبر است";
}
else
{
echo "کد ملی معتبر نیست";
}
}
}
}
?>
نحوه ی کار این کد به این صورت است که یک کد ملی (nccode) را توسط متد POST دریافت می کند و به تابع CheckNationalCode می دهد تا صحت آنرا بررسی کند.
این فانکشن را در قالب یک برنامه پی اچ پی که با استفاده از ajax کد ملی را Validat می کند، پیاده سازی کردم
دانلود نمونه برنامه (http://rapidshare.com/files/430817058/CheckNationalCode.rar)
مشاهده ی نمونه برنامه (http://keramatifar.ir/tests/enternc.php)
منبع : وب سایت جناب آقای کرامتی فر (http://keramatifar.ir)