1398/6/30، 06:37 عصر
سلام دوستان؛
با توجه به اینکه ممکنه لازم باشه در بازیتون از کاربر کدملی اش رو سوال کنین امروز یک سورس براتون آماده کردم که میتونه صحت کدملی که وارد می کنین رو بسنجه. (البته فقط از لحاظ ساختاری بررسی میکنه اگر کسی فوت کرده باشه چون به دیتابیس ثبت احوال متصل نیست نمیتونه اظهار نظری بکنه و کدملی رو معتبر نمایش میده)
!توجه! ::.. کد php برای استعلام صحت کد ملی اضافه شـد ..::
*** خیلی دوست داشتم که امکان اینکه بگه کدملی از کجا صادر شده هم وجود داشته باشه اما تهیه دیتابیس xml خیلی وقت گیر بود و توی نت هم دیتابیس آماده ای پیـدا نکردم. این باشه طلبتون. با شروع مدارس همه برنامه ریزی های آدم میریزه به هم . ضمن اینکه تأخیر یک و نیم ثانیه ای تا دریافت جواب رو هم رو به خاطر ناسازگاری پلاگین sweet alert با فشرده شدن کلید کیبرد مجبور شدم اعمال کنم. شما میتونین از پلاگین های مشابه یا اصلاً یک تکست استفاده کنین و تأخیر رو لحاظ نکنین. ****
_____________________
میتونین اینجا آنلاین تست کنین...
________________________
شما عزیزان میتونین از طریق کد php زیر که حقیر نوشتم با استفاده از ajax صحت کد ملی رو بسنجین؛
کد به این شرحه:سعی کردم عملکرد کد رو کاملاً تشریح کنم تا موردی برای ابهام نباشه.....
شما میتونین برای اینکه بفهمین کاربر کدملی رو درست وارد کرده این فایل php رو توی هاست یا سرورتون آپلود کنین و با استفاده از ajax در قالب آدرس زیر یک ریکوئست به سرور یا هاستتون ارسال کنین:** filename در واقع همون نامی هست که توی سرور یا هاستتون فایل php رو ذخیره کردین به اون نام و به جای پارامـتر " x " باید کدملی که قصد دارین صحتش رو بسنجین رو قرار بدین... مثلاً اگر کاربر کدملی رو در یک تکست باکس وارد کرده میتونین به جای پارامتر x عبارت " Textbox.text " رو قرار بدین..... البته برای اینکار باید قبلش یک علامت "&" هم درج کنین و در انتهای آدرس کوتیشن نگذارین! بزارین یک مثال براتون بزنم:
دانلود سورس
__________________
این سورس میتونه نمونه خوبی برای دقیق شدن در پردازش متن در محیط کانستراکت باشه...
اما الگوریتمی که وجود داره به این شرحه:
اول اینکه هر کدملی 10 رقمه که آخرین رقم از سمت راست رو میگیم رقم کنترل (CID)
پس این شد ساختار کدملی:
حالا هر رقم رو در موقعیت خودش ضرب میکنیم و در پایان همه رو با هم جمع میزنیم به غیر از کدکنترل. حاصل رو بر 11 تقسیم میکنیم اگر رابطه زیر برقرار بود نشون میده کدملی وارد شده از لحاظ ساختاری درسته: (R= باقی مانده تقسیم)
CID=R-11
یک مثال:
_____________________________________________________
این الگوریتم تشخیص صحت کدملی بود و پیاده سازی اش توی کانستراکت تا حدودی دشوار بود.
در واقع بخش سختش استخراج موقعیت هرعدد بود که با استفاده از اکسپرشن right و left که کارش شمارش از چپ یا راست یک رشته است و انتخاب و استخراج کاراکتر موردنظره.
اما چالش اینجا بود که هر وقت چه از چپ و چه راست قصد داشتیم کاراکتر دوم به بعد رو استخراج کنیم کاراکتر های قبلی رو هم به حساب می آورد که ما اینطور نمیخواستیم بشه در نتیجه اومدیم برای هر متغیر یک نسخه b تهیه کردیم و متغیر اصلی رو از حالت نامبر به تکست بردیم و بعدش گفتیم از نتیجه انتخاب از راست فرضاً متغیر r6 یکی رو از راست بشمار و برابر با مقدار r6b قرار بده...
این هم یک توضیح دست و پا شکسته که اگر ایونت ها رو نگاه بندازین خودتون متوجه میشین چی میگم.....
_________________________________________
با توجه به اینکه ممکنه لازم باشه در بازیتون از کاربر کدملی اش رو سوال کنین امروز یک سورس براتون آماده کردم که میتونه صحت کدملی که وارد می کنین رو بسنجه. (البته فقط از لحاظ ساختاری بررسی میکنه اگر کسی فوت کرده باشه چون به دیتابیس ثبت احوال متصل نیست نمیتونه اظهار نظری بکنه و کدملی رو معتبر نمایش میده)
!توجه! ::.. کد php برای استعلام صحت کد ملی اضافه شـد ..::
*** خیلی دوست داشتم که امکان اینکه بگه کدملی از کجا صادر شده هم وجود داشته باشه اما تهیه دیتابیس xml خیلی وقت گیر بود و توی نت هم دیتابیس آماده ای پیـدا نکردم. این باشه طلبتون. با شروع مدارس همه برنامه ریزی های آدم میریزه به هم . ضمن اینکه تأخیر یک و نیم ثانیه ای تا دریافت جواب رو هم رو به خاطر ناسازگاری پلاگین sweet alert با فشرده شدن کلید کیبرد مجبور شدم اعمال کنم. شما میتونین از پلاگین های مشابه یا اصلاً یک تکست استفاده کنین و تأخیر رو لحاظ نکنین. ****
_____________________
میتونین اینجا آنلاین تست کنین...
________________________
شما عزیزان میتونین از طریق کد php زیر که حقیر نوشتم با استفاده از ajax صحت کد ملی رو بسنجین؛
کد به این شرحه:
کد:
<?php
// تعریف مجوز برای سازگاری درخواست ajax در انواع مرورگرهـا
header('Access-Control-Allow-Origin: *');
// تعریف متغیر کد و تنظیم مقدار آن به مقدار ورودی توسط کاربر
$code = $_GET ['code'];
// تعریف تابع (فانکشن) چک کردن صحت کد مـلی
function checkcode($code)
{
// اگر مقدار ارقام وارده غیرمجاز بود یک عدد به مقدار متغیر khat اضافه کن
$khat=0;
if(!preg_match('/^[0-9]{10}$/',$code))
$khat++;
for($i=0;$i<10;$i++)
if(preg_match('/^'.$i.'{10}$/',$code))
$khat++;
// محاسبات الگوریتم
for($i=0,$sum=0;$i<9;$i++)
$sum+=((10-$i)*intval(substr($code, $i,1)));
$ret=$sum%11;
$parity=intval(substr($code, 9,1));
// بررسی شرط الگوریتم
if(($ret<2 && $ret==$parity && $khat==0) || ($ret>=2 && $ret==11-$parity && $khat==0))
// اگر درست بود این پیغام را نمایش بده
echo "true";
// در غیر اینصورت
else
// این پیغام را نمایش بده
echo "false";
}
// استفاده از تابع تعریف شده برای چک کردن صحت کـد مـلی وارده توسط کـاربر
checkcode($code)
?>
شما میتونین برای اینکه بفهمین کاربر کدملی رو درست وارد کرده این فایل php رو توی هاست یا سرورتون آپلود کنین و با استفاده از ajax در قالب آدرس زیر یک ریکوئست به سرور یا هاستتون ارسال کنین:
کد:
http://www.yourhost.com/filename.php?code= x
- من فایل php خودم رو توی یک لوکال هاست زمپ آپلود کردم (به آدرس پیشفرض 127.0.0.1) و نامش رو هم check_melicode انتخاب کردم. قراره صحت کدملی که کاربر داخل تکست باکس وارد کرده رو با استفاده از این فایل php تعیین کنم. ایونت ها به این شرح میشه:
همونطور که می بینین آدرس ریکوئست به این شکل شد:
"http://127.0.0.1/check_melicode.php?code="&textbox.Text
- فرقی نمیکنه بخواین آرگومانی که تعریف کنین یک متغیر باشه یا تکست باکس در هر حال فرمت به این شکل خواهد بود...
دانلود سورس
__________________
این سورس میتونه نمونه خوبی برای دقیق شدن در پردازش متن در محیط کانستراکت باشه...
اما الگوریتمی که وجود داره به این شرحه:
اول اینکه هر کدملی 10 رقمه که آخرین رقم از سمت راست رو میگیم رقم کنترل (CID)
پس این شد ساختار کدملی:
حالا هر رقم رو در موقعیت خودش ضرب میکنیم و در پایان همه رو با هم جمع میزنیم به غیر از کدکنترل. حاصل رو بر 11 تقسیم میکنیم اگر رابطه زیر برقرار بود نشون میده کدملی وارد شده از لحاظ ساختاری درسته: (R= باقی مانده تقسیم)
CID=R-11
یک مثال:
_____________________________________________________
این الگوریتم تشخیص صحت کدملی بود و پیاده سازی اش توی کانستراکت تا حدودی دشوار بود.
در واقع بخش سختش استخراج موقعیت هرعدد بود که با استفاده از اکسپرشن right و left که کارش شمارش از چپ یا راست یک رشته است و انتخاب و استخراج کاراکتر موردنظره.
اما چالش اینجا بود که هر وقت چه از چپ و چه راست قصد داشتیم کاراکتر دوم به بعد رو استخراج کنیم کاراکتر های قبلی رو هم به حساب می آورد که ما اینطور نمیخواستیم بشه در نتیجه اومدیم برای هر متغیر یک نسخه b تهیه کردیم و متغیر اصلی رو از حالت نامبر به تکست بردیم و بعدش گفتیم از نتیجه انتخاب از راست فرضاً متغیر r6 یکی رو از راست بشمار و برابر با مقدار r6b قرار بده...
این هم یک توضیح دست و پا شکسته که اگر ایونت ها رو نگاه بندازین خودتون متوجه میشین چی میگم.....
_________________________________________