سورس تشخیص صحت کدمـلی + کد php
#1
Lightbulb 
سلام دوستان؛
با توجه به اینکه ممکنه لازم باشه در بازیتون از کاربر کدملی اش رو سوال کنین امروز یک سورس براتون آماده کردم که میتونه صحت کدملی که وارد می کنین رو بسنجه. (البته فقط از لحاظ ساختاری بررسی میکنه اگر کسی فوت کرده باشه چون به دیتابیس ثبت احوال متصل نیست نمیتونه اظهار نظری بکنه و کدملی رو معتبر نمایش میده)


!توجه! ::.. کد php برای استعلام صحت کد ملی اضافه شـد ..::



*** خیلی دوست داشتم که امکان اینکه بگه کدملی از کجا صادر شده هم وجود داشته باشه اما تهیه دیتابیس xml خیلی وقت گیر بود و توی نت هم دیتابیس آماده ای پیـدا نکردم. این باشه طلبتون. با شروع مدارس همه برنامه ریزی های آدم میریزه به هم 20 . ضمن اینکه تأخیر یک و نیم ثانیه ای تا دریافت جواب رو هم رو به خاطر ناسازگاری پلاگین 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
** filename در واقع همون نامی هست که توی سرور یا هاستتون فایل php رو ذخیره کردین به اون نام و به جای پارامـتر " x " باید کدملی که قصد دارین صحتش رو بسنجین رو قرار بدین... مثلاً اگر کاربر کدملی رو در یک تکست باکس وارد کرده میتونین به جای پارامتر x عبارت " Textbox.text " رو قرار بدین..... البته برای اینکار باید قبلش یک علامت "&" هم درج کنین و در انتهای آدرس کوتیشن نگذارین! بزارین یک مثال براتون بزنم:
  • من فایل php خودم رو توی یک لوکال هاست زمپ آپلود کردم (به آدرس پیشفرض 127.0.0.1) و نامش رو هم check_melicode انتخاب کردم. قراره صحت کدملی که کاربر داخل تکست باکس وارد کرده رو با استفاده از این فایل php تعیین کنم. ایونت ها به این شرح میشه:
  • [تصویر:  tes.png]
    همونطور که می بینین آدرس ریکوئست به این شکل شد:
    "http://127.0.0.1/check_melicode.php?code="&textbox.Text
  • فرقی نمیکنه بخواین آرگومانی که تعریف کنین یک متغیر باشه یا تکست باکس در هر حال فرمت به این شکل خواهد بود...
_____________________

دانلود سورس 
__________________
این سورس میتونه نمونه خوبی برای دقیق شدن در پردازش متن در محیط کانستراکت باشه...
اما الگوریتمی که وجود داره به این شرحه:
اول اینکه هر کدملی 10 رقمه که آخرین رقم از سمت راست رو میگیم رقم کنترل (CID)
پس این شد ساختار کدملی:


[تصویر:  Annotation_2019_09_21_182251.png]
حالا هر رقم رو در موقعیت خودش ضرب میکنیم و در پایان همه رو با هم جمع میزنیم به غیر از کدکنترل. حاصل رو بر 11 تقسیم میکنیم اگر رابطه زیر برقرار بود نشون میده کدملی وارد شده از لحاظ ساختاری درسته: (R= باقی مانده تقسیم)
CID=R-11

یک مثال: 

[تصویر:  2x.png]
_____________________________________________________
این الگوریتم تشخیص صحت کدملی بود و پیاده سازی اش توی کانستراکت تا حدودی دشوار بود.
در واقع بخش سختش استخراج موقعیت هرعدد بود که با استفاده از اکسپرشن right و left که کارش شمارش از چپ یا راست یک رشته است و انتخاب و استخراج کاراکتر موردنظره.
اما چالش اینجا بود که هر وقت چه از چپ و چه راست قصد داشتیم کاراکتر دوم به بعد رو استخراج کنیم کاراکتر های قبلی رو هم به حساب می آورد که ما اینطور نمیخواستیم بشه در نتیجه اومدیم برای هر متغیر یک نسخه b تهیه کردیم و متغیر اصلی رو از حالت نامبر به تکست بردیم و بعدش گفتیم از نتیجه انتخاب از راست فرضاً متغیر r6 یکی رو از راست بشمار و برابر با مقدار r6b قرار بده...
این هم یک توضیح دست و پا شکسته که اگر ایونت ها رو نگاه بندازین خودتون متوجه میشین چی میگم.....
_________________________________________
غایب
  پاسخ


#2
سلام
سورس خیلی جالبی بود.
اما من کد ملیم رو زدم و گفت اشتباهه!
  پاسخ


 سپاس شده توسط: Master Badfar ، shazde
#3
من که زدم گفت درسته . فقط اینکه میزنه درسته رو تو کانستراکت درست کردید ؟؟؟ خیلی باحال بود . (همون تیکه و ...)
استودیو بازیسازی ایروید
جدید ترین ها : شهرزاد ، دربند;1357 و ATOM
[تصویر:  ads.gif]
  پاسخ


 سپاس شده توسط: Master Badfar
#4
(1398/6/30، 09:18 عصر)rezamms نوشته است: سلام
سورس خیلی جالبی بود.
اما من کد ملیم رو زدم و گفت اشتباهه!

سلام.
حدس میزنم یکسری اشتباهات لپی توی ایونت نویسی ها کرده باشم که رفع میکنم.

(1398/6/30، 09:52 عصر)محمد 82 نوشته است: من که زدم گفت درسته . فقط اینکه میزنه درسته رو تو کانستراکت درست کردید ؟؟؟ خیلی باحال بود . (همون تیکه و ...)

از پلاگین sweet alert برای آلارمش استفاده کردم.
غایب
  پاسخ


 سپاس شده توسط: shazde
#5
برای منم نامعتبر زد
سورس شما رو نتونستم باز کنم(بخاطر پلاگین Sweet alert)
خودم یه سورس ساختم که مشکل نداره و احتمالاً از یک روش متفاوت و ساده تر استفاده کردم .
منم از پلاگین Sweet alert استفاده کردم(جالبه) ولی با مال شما فرق داره 39
http://s3.picofile.com/file/8373067318/C....capx.html

پلاگین :
https://www.construct.net/en/forum/exten...-ii-130224
  پاسخ


 سپاس شده توسط: shazde ، Master Badfar
#6
پلاگین جالبیه . دوستان اگه بازم از این پلاگینا که جذابیت داره دارید بزارید . ضمنا این پلاگین رو اندروید کار میکنه ؟؟؟
استودیو بازیسازی ایروید
جدید ترین ها : شهرزاد ، دربند;1357 و ATOM
[تصویر:  ads.gif]
  پاسخ


 سپاس شده توسط:
#7
بله من تست کردم کار می کرد
  پاسخ


 سپاس شده توسط: Master Badfar
#8
و یه چیز جالب تر اینکه اگه توی سورس Master Badfar فقط عدد 1 رو وارد کنی میگه درسته
  پاسخ


 سپاس شده توسط: Master Badfar ، shazde
#9
(1398/6/31، 01:08 عصر)rezamms نوشته است: و یه چیز جالب تر اینکه اگه توی سورس Master Badfar فقط عدد 1 رو وارد کنی میگه درسته

همونطور که گفتم مشکل توی قسمت آخر ایونت ها هست وگرنه محاسبات درست انجام میشه.
آلارم ها درست نشون داده نمیشه و بعضی وقتا نامعتبر با معتبر قاطی میشه.
سورس اصلاح شده و مشکلی نداره به ابتدای تاپیک مراجعه کنین.
غایب
  پاسخ


 سپاس شده توسط: rezamms ، محمد 82 ، shazde
#10
(1398/6/31، 01:51 صبح)hamid5700 نوشته است: برای منم نامعتبر زد
سورس شما رو نتونستم باز کنم(بخاطر پلاگین Sweet alert)
خودم یه سورس ساختم که مشکل نداره و احتمالاً از یک روش متفاوت و ساده تر استفاده کردم .
منم از پلاگین Sweet alert استفاده کردم(جالبه) ولی با مال شما فرق داره 39
http://s3.picofile.com/file/8373067318/C....capx.html

پلاگین :
https://www.construct.net/en/forum/exten...-ii-130224

ممنون که این سورس رو ساختی. 
من هم اتفاقاً در نظر داشتم این پیچیدگی کوچیکی که هست رو لحاظ نکنم ولی خُب توی این سورس اکسپرشن های مفیدی به کار رفته... در واقع هدف اصلیم این بود با این سورس که کاربرد داره استفاده عملی از چندتا از اکسپرشن های پردازش متن کمتر دیده شده  رو نمایش بدم....
غایب
  پاسخ


 سپاس شده توسط: shazde


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
  سورس بازی کامل بمبرمن (رایگان ) mohsen_nasri 0 2,193 1399/10/30، 06:28 عصر
آخرین ارسال: mohsen_nasri
  سورس استفاده از دیدئو در کانستراکت rezamms 8 4,616 1399/7/8، 08:58 صبح
آخرین ارسال: rezamms
  سورس ایجاد افکت تایپ rezamms 2 2,588 1399/6/21، 12:40 عصر
آخرین ارسال: M.gh
  سورس ساخت خدم mega_24 5 4,668 1399/3/12، 03:25 عصر
آخرین ارسال: M.gh
  سورس استفاده از فانکشن oak 17 9,728 1399/1/7، 08:51 عصر
آخرین ارسال: oak

پرش به انجمن: