2016-12-11 9 views
1

こんにちは私のlaravelプロジェクトの入力データのカスタム検証を作成しています。私はCarbon :: createFromDate() - > ageを使用して、ユーザーの年齢を取得し、彼が16歳以上かどうかをチェックします。分離記号は、分離記号が Carbon :: createFromDate() - >年齢でInvalidArgumentExceptionが発生しました

  • 2桁の分を見つけることができませんでした
  • 見つかりませんでした

  • :私は、このようなエラーで InvalidArgumentExceptionを取得するので、私は私がそれを正しくやっていないよ数えます見つかりませんでした
  • 予期しないデータが見つかりました。
  • 後続のデータ
  • $の韓国は年です(1996など。)$のmiesiacは月と$ dzienは日です。 Peselはポーランド人のユニークなID番号です。 「年:21586738427月:1900167日: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は1年です(たとえば1996年)$ miesiacは月、$ dzienは日です。 Peselはポーランド人のユニークなID番号です。 peselから日付(年、月、日)を取得 –

    +0

    本当に、それらの3つすべてを 'dd()'でき、あなたの質問にその結果を追加できますか? –

    答えて

    0

    大丈夫です、私は問題を解決しました。それは私のコードのせいだった

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

    それが今では、 `$

    関連する問題