2011-04-30 3 views
0

이 함수가 어떻게 작동하는지 알고 싶습니다. ColdFusion에서이 함수를 다시 작성할 수 있습니다. 나는 PHP로 프로그래밍 한 적이 없다. 나는을 생각하고 함수는 $ string이 길이가 11 인 경우 함수를 검사한다.이 간단한 PHP 함수를 이해해 주시겠습니까?

  1. 하지만 어떻게 처리하고 있습니까?
  2. 간단한 len() 함수 대신 루프를 사용하는 이유는 무엇입니까?

나는 str_pad()에 대해 읽고 이해했다. 그러나 세 번째 인수로 루프 반복 함수 $i은 무엇입니까? 뭐하는거야?

if($this->check_fake($cpf, 11)) return FALSE; 

function check_fake($string, $length) 
{ 
    for($i = 0; $i <= 9; $i++) { 
    $fake = str_pad("", $length, $i); 
    if($string === $fake) return(1); 
    } 
} 

이 기능은 미국의 SSN #과 동일한 브라질의 CPF를 확인하기위한 것입니다. CPF는 11 자입니다. 기본적으로 Coldfusion에서 함수를 작성할 수 있도록 함수가 무엇을하는지 알아야합니다.

단지 길이라면 if (len(cpf) != 11) return false;이 될 수 없습니까? 당신을 관심을 끄는 경우 여기

전체 코드이다 : 그것은 기본적으로 확인합니다

<? 
    /* 
    *@ Class VALIDATE - It validates Brazilian CPF/CNPJ numbers 
    *@ Developer: André Luis Cupini - [email protected] 
    ************************************************************/ 
    class VALIDATE 
    { 
     /* 
     *@ Remove ".", "-", "/" of the string 
     *****************************************************/ 
     function cleaner($string) 
     { 
      return $string = str_replace("/", "", str_replace("-", "", str_replace(".", "", $string))); 
     } 

     /* 
     *@ Check if the number is fake 
     *****************************************************/ 
     function check_fake($string, $length) 
     { 
      for($i = 0; $i <= 9; $i++) { 
       $fake = str_pad("", $length, $i); 
       if($string === $fake) return(1); 
      } 
     } 

     /* 
     *@ Validates CPF 
     *****************************************************/ 
     function cpf($cpf) 
     { 
      $cpf = $this->cleaner($cpf); 
      $cpf = trim($cpf); 
      if(empty($cpf) || strlen($cpf) != 11) return FALSE; 
      else { 
       if($this->check_fake($cpf, 11)) return FALSE; 
       else { 
        $sub_cpf = substr($cpf, 0, 9); 
        for($i =0; $i <=9; $i++) { 
         $dv += ($sub_cpf[$i] * (10-$i)); 
        } 
        if ($dv == 0) return FALSE; 
        $dv = 11 - ($dv % 11); 
        if($dv > 9) $dv = 0; 
        if($cpf[9] != $dv) return FALSE; 

        $dv *= 2; 
        for($i = 0; $i <=9; $i++) { 
         $dv += ($sub_cpf[$i] * (11-$i)); 
        } 
        $dv = 11 - ($dv % 11); 
        if($dv > 9) $dv = 0; 
        if($cpf[10] != $dv) return FALSE; 
        return TRUE; 
       } 
      } 
     } 
} 
?> 
+2

약간의 주제는 아니지만 유효성 검사 의사 코드가있는 [CPF] (http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas)에 대한 위키 백과 문서가 있습니다. 매우 유혹받을 것입니다. 위의 PHP 코드보다는이 코드를 사용하십시오. –

+0

제어 숫자를 계산하고 검사하는 알고리즘을 구현하는 것이 더 좋지 않습니까? 사람들은 12345678901과 같은 것을 시도 할 수 있습니다. 이는 알고리즘에 따라 완전히 맞을 것입니다. 예를 들어 Wikipedia를 확인하십시오. http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas –

+0

@middaparka와 @Emil Vikstrom은 정확히 코드를 수행하는 주요 기능이 아닙니까? – Mohamad

답변

1

:

function check_fake($string, $length) 
{ 
    // for all digits 
    for($i = 0; $i <= 9; $i++) 
    { 
     // create a $length characters long string, consisting of 
     // $length number of the number $i 
     // e.g. 00000000000 
     $fake = str_pad("", $length, $i); 
     // return true if the provided CPN is equal 
     if($string === $fake) return(1); 
    } 
} 

짧으면, 제공된 문자열이 $ length times만큼 반복 된 동일한 자인지를 테스트합니다.

2

숫자는되지 않습니다 : 등

11111111111 
22222222222 
33333333333 
44444444444 
55555555555 

... 의견

관련 문제