2016-12-11 4 views
1

안녕하세요 저는 laravel 프로젝트의 입력 데이터에 대한 사용자 지정 유효성 검사를 작성하고 있습니다. 나는 나이를 얻고 그가 16 이상인지 확인하기 위해 Carbon :: createFromDate() -> age를 사용하고있다. 분리 기호가 분리 기호는 InvalidArgumentException Carbon :: createFromDate() -> age

  • 두 자리 분을 찾을 수 없습니다
  • 찾을 수 없습니다

  • : 내가 이러한 오류와 InvalidArgumentException를 얻을 수 있기 때문에 내가 제대로 일을하고 있지 않다 생각한다 을 (를) 찾을 수 없습니다.
  • 예기치 않은 데이터가 있습니다.
  • 후행 데이터
  • $의 한국은 올해 (1996 예.) $의 miesiac는 달와 $ dzien는 날이다. Pesel은 폴란드 시민의 고유 ID 번호입니다. "년 : 2백15억8천6백73만8천4백27개월 : 1,900,167일 : 9001727"

    pesel에서 나는 (년, 월, 일)

    좀 큰 숫자를 받고 있어요 그리고 난 그들이 여기에서 의미하는 DD 알고하지 않는 날짜를 얻을

    은 여기 내 AppServiceProvider

    <?php 
    
    namespace App\Providers; 
    use Illuminate\Support\ServiceProvider; 
    use Carbon\Carbon; 
    use Validator; 
    use Log; 
    
    class AppServiceProvider extends ServiceProvider 
    { 
        /** 
        * Bootstrap any application services. 
        * 
        * @return void 
        */ 
        public function boot() 
        { 
         //Custom validator for pesel validation 
         Validator::extend('pesel',function($attribute,$value,$parameters) 
         { 
          $v = $value; 
          //check if psesel is 11 chars long 
          if (strlen($v) != 11) 
          { 
          Log::info("Pesel is not 11 chars long"); 
          return; 
          } 
          //check whether all chars are numbers 
    
          $aInt = array(); 
    
          for($i = 0; $i < 11; $i++) 
          { 
          $val = substr($v,$i+1); 
          $valInt = (int) $val; 
          $aInt[$i] = $valInt; 
         if(is_nan($aInt[$i])) 
          { 
           Log::info("User inserted invalid number"); 
           return; 
          } 
          } 
    
    
          //check control sum 
          $wagi = [1,3,7,9,1,3,7,9,1,3,1]; 
          $sum = 0; 
          for($i = 0;$i < 11;$i++) 
          { 
          $sum += $wagi[$i]*$aInt[$i]; 
          if(Log::info(($sum%10)!=0)) 
          { 
           return; 
          } 
          //count the year,month,and day from pesel 
          $rok = 1900+$aInt[0]*10+$aInt[1]; 
          if($aInt[2]>=2 && $aInt[2]<8) 
          { 
          $rok += floor($aInt[2]/2)*100; 
          } 
          if($aInt[2]>=8) 
          { 
          $rok -= 100; 
          } 
          $miesiac = ($aInt[2]%2)*10+$aInt[3]; 
          $dzien = $aInt[4]*10+$aInt[5]; 
          Log::info("Parsing the date in carbon"); 
    
          //validate whether user is 16 years or more 
          $userAge = Carbon::createFromDate($rok, $miesiac, $dzien,'Europe/Warsaw')->age; 
          if($userAge < 16) 
          { 
          Log::info("user is not 16 or more"); 
          return; 
          } 
    
    
    
         } 
    
         }); 
        } 
    
        /** 
        * Register any application services. 
        * 
        * @return void 
        */ 
        public function register() 
        { 
         // 
        } 
    
    } 
    
    +1

    당신은'$의 rok','$ miesiac' 및의 값을 지정할 수 있습니다 작동

    $val = substr($v,$i,1); 

    해야 잘못 dizen'? –

    +0

    $ rok는 한 해 (1996 년 예) $ miesiac은 한 달이고 $ dzien은 일입니다. Pesel은 폴란드 시민의 고유 ID 번호입니다. pesel에서 날짜를 얻습니다. (연, 월, 일) –

    +0

    정말로 그 중 3 개를 모두 dd() 할 수 있고 그 결과를 질문에 추가 할 수 있습니까? –

    답변

    0

    내가 문제를 해결 확인의 코드입니다. 그것은 내 코드의 잘못

    $val = substr($v,$i+1); 
    

    가 지금은`$