احراز هویت با کد ملی در لاراول
اگه شما هم توسعه دهنده لاراول هستید ممکنه براتون پیش بیاد بخواید اعتبار سنجی کد ملی تو سایتتون انجام بدید.لاراول یه سیستم مخصوص خودش داره برای تایید درخواست api به اسم request که توسط رول های کاستوم میتونین ارتقا بدینش.
خب بریم سراغ اعتبار سنجی ابتدا یک رول ایجاد میکنیم
دستور زیر تو ترمینال وارد کنید
Php artisan make:rule Nationalcode
این Rule که ایجاد کردیم تو مسیر App و Rule ایجاد شده فایل مورد نظر باز میکنیم دو متد داریم یکی passes که اعتبار سنجی تو این متد انجام میشه و یه متد message که در صورت اشتباه بودن کد ملی پیغامی که میخایم به کابر نمایش بده مینویسیم.
تو متد passes به این شکل مینویسم
public function passes($attribute, $value)
{
if(!preg_match("/^[۰-۹]{۱۰}$/",$value))
return false;
for($i=۰;$i<۱۰;$i++)
if(preg_match("/^".$i."{۱۰}$/",$value))
return false;
for($i=۰,$sum=۰;$i<۹;$i++)
$sum+=((۱۰-$i)*intval(substr($value, $i,۱)));
$ret=$sum%۱۱;
$parity=intval(substr($value, ۹,۱));
if(($ret<۲ && $ret==$parity) || ($ret>=۲ && $ret==۱۱-$parity))
return true;
return false;
}
تو متد message به این شکل مینویسم
public function message()
{
return "The national code is incorrect";
}
با استفاده از تابع preg_match() هر نوع اعتبار سنجی با همدیگه انجام می دیم.
این تابع دو پارامتر ورودی داره، پارامتر اول همون عبارت منظمیه که ما اونو به عنوان یک الگو یا طرح می سازیم و دومین پارامتر هم رشته ایه که قصد داریم ببینیم که آیا با عبارت با قاعده، متناظر (match) می شه یا نه.
به طور خلاصه به کمک این تابع میتونیم یک رشته را بر اساس الگویی که نوشتیم بررسی کنیم که رشته مورد نظر ما هست یا خیر.
و در اخر باید در رجیستر کنترلر در قسمت ولیدیت Rule که ایجاد کردیم به ریکوئست به این شکل اضافه میکنیم
"codemeli" => ["required", new Nationalcode],
و حتماباید رول Nationalcode در بالا یوز کنیم
use App\Rules\Nationalcode;
موفق باشید.