• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ادغام دو اعتبار سنج برای یک فیلد
#1
سلام به همه

من برای تشخیص صحت کد ملی از این کد استفاده میکنم

کد پی‌اچ‌پی:
    public static function codemelli($meli_code)
    {
        
if (
strlen($meli_code) == 10){
if(
$meli_code=='1111111111' ||
$meli_code=='0000000000' ||
$meli_code=='2222222222' ||
$meli_code=='3333333333' ||
$meli_code=='4444444444' ||
$meli_code=='5555555555' ||
$meli_code=='6666666666' ||
$meli_code=='7777777777' ||
$meli_code=='8888888888' ||
$meli_code=='9999999999' ){
return 
false;
}
$c intval(substr($meli_code,9,1));
$n intval(substr($meli_code,0,1))*10 +
intval(substr($meli_code,1,1))*+
intval(substr($meli_code,2,1))*+
intval(substr($meli_code,3,1))*+
intval(substr($meli_code,4,1))*+
intval(substr($meli_code,5,1))*+
intval(substr($meli_code,6,1))*+
intval(substr($meli_code,7,1))*+
intval(substr($meli_code,8,1))*2;
$r $n intval ($n/11)*11;
if ((
$r == && $r == $c) || ($r == && $c == 1) || ($r && $c == 11 $r)){
return 
true;
}else{
return 
false;
}
}else{
return 
false;
}
    } 

و برای اینکه کاربر فیلد تکراری رو ثب نکنه این کد رو اسفاده میکنم

کد پی‌اچ‌پی:
    public static function uniquefield($value$extra=null,$data=null)
    {
        
$db     JFactory::getDBO();
        
$form   JRequest::getVar('form');
        
$formId = (int) @$form['formId'];
        
        
$db->setQuery("SELECT `SubmissionValueId` FROM #__rsform_submission_values WHERE FormId='".$formId."' AND `FieldName`='".$db->escape($data['NAME'])."' AND `FieldValue`='".$db->escape($value)."'");
        return 
$db->loadResult() ? false true;
    } 

و حالا میخوام از هر دو اعتبار ستنج در یک فیلد استفاده کنم به نحوی که کد ملی اشتباه بود خطا بده و اگر درست بود و قبلا ثبت شده بود هم همینطور

ممنون میشم راهنماییم کنید
  پاسخ
تشکر شده توسط :
#2
سلام،
خب شما یه شرط بزار به این صورت
کد پی‌اچ‌پی:
if( codemelli($var) && uniquefield($var) )
{
// Insert To Database.


یا اگه خطای جدا جدا می‌خوای همین شرط رو ۲ بار اجرا کن
کد پی‌اچ‌پی:
if( !codemelli($var) )
{
// Error
}
elseif ( !
uniquefield($var) )
{
// Error
}
else
{
// Insert To Database.

فک کنم منظورتون همچین چیزی بود؟
غایب
  پاسخ
تشکر شده توسط : mohammas Y.P.Y
#3
خیلی ممنون از پاسختون فکر کنم من کمی مبهم توضیح دادم

این اعتبار سنج برای یک cms هست کافیه من کد رو پشت سر هم در یک فانگشن بیارم

برای مثال برای وقتی میخوام کدملی رو اعمال کنم برای اعتبار سنجش codemelli رو انتخاب میکنم
public static function codemelli($meli_code)

میخوام طوری بشه که هر دو اعتبار سنج با یک function اجرا بشن به نحوی که اگر اولی برقرار شد دومی رو اجرا کنه

ساده بگم میخوام هر دو کد یکی بشن
بازم ممنون از پاسخگویی خوبتون
  پاسخ
تشکر شده توسط :
#4
الان از بین ۳ تا متغیر $value, $extra=null,$data=null که به تابع unique میفرستین، کد ملی توشون هست؟
غایب
  پاسخ
تشکر شده توسط : mohammas
#5
نه نیست کلا کدهای مربوط به اعتبار سنج کدملی و اون یکی رو براتون جدا جدا فرستادم اگه لطف کنید یه نگاه بهش بندازید چون من اطلاعاتم کافی نیست.
  پاسخ
تشکر شده توسط :
#6
http://www.phpclasses.org/package/6735-P...iles/34243
این چطوره؟
کد پی‌اچ‌پی:
<?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 [email protected] 
 */ 

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($melliCode101); 

            
$getNum 0

            for(
$i 1$i 10$i++) 
                
$getNum += (self::subMidNumbers($melliCode$i1) * (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
    } 


?>
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط : mohammas
#7
خیلی خیلی ممنون از وقتی که گذاشتید کد رو که جایگذین میکنم با خطا مواجه میشم فایل رو پیوست کردم ممنون میشم برسی کنید.


فایل‌های پیوست
.zip   cod melli.zip (اندازه 2.75 KB / تعداد دانلود: 0)
  پاسخ
تشکر شده توسط :
#8
up

سلام ممنون از پاسخ های قبل من مشکلم حل نشده لطف میکنید کمک کنید.
  پاسخ
تشکر شده توسط :
#9
نقل قول:خیلی خیلی ممنون از وقتی که گذاشتید کد رو که جایگذین میکنم با خطا مواجه میشم فایل رو پیوست کردم ممنون میشم برسی کنید.
چه خطایی خب؟
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط :
#10
فایل پیوست رو ببینید.

اعتبار سنج کد ملی میتونه تشخیص بده که کد ملی وارد شده حقیقی هست یا نه تا اینجا که مشکلی نیست

حالا میخوام هر کاربر فقط بتونه یک بار کد ملی رو وارد کنه

پس فقط کافیه این کد رو لطف کنید به هر نحوی که خودتون میدونید کاری کنید که برای هر کاربر فقط یک بار بتونه این ثبت رو انجام بده

در cms که من استفاده میکنم این دو کد برای منحصر به فرد کردن فیلد استفاده میشه

قبلا از توجه و زحماتتون ممنونم

کد:
    public static function uniquefield($value, $extra=null,$data=null)
    {
        $db     = JFactory::getDBO();
        $form   = JRequest::getVar('form');
        $formId = (int) @$form['formId'];
        
        $db->setQuery("SELECT `SubmissionValueId` FROM #__rsform_submission_values WHERE FormId='".$formId."' AND `FieldName`='".$db->escape($data['NAME'])."' AND `FieldValue`='".$db->escape($value)."'");
        return $db->loadResult() ? false : true;
    }

و

کد:
    public static function uniquefielduser($value, $extra=null,$data=null)
    {
        $db     = JFactory::getDBO();
        $form   = JRequest::getVar('form');
        $formId = (int) @$form['formId'];
        $user    = JFactory::getUser();
        
        $db->setQuery("SELECT sv.`SubmissionValueId` FROM #__rsform_submission_values sv LEFT JOIN #__rsform_submissions s ON (sv.SubmissionId=s.SubmissionId) WHERE sv.FormId='".$formId."' AND sv.`FieldName`='".$db->escape($data['NAME'])."' AND sv.`FieldValue`='".$db->escape($value)."' AND (".($user->get('guest') ? "s.`UserIp`='".$db->escape($_SERVER['REMOTE_ADDR'])."'" : "s.`UserId`='".(int) $user->get('id')."'").")");
        return $db->loadResult() ? false : true;
    }


فایل‌های پیوست
.php   validation.php (اندازه 2.68 KB / تعداد دانلود: 0)
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان