我想知道這個函數是如何工作的,所以我可以在ColdFusion中重新編寫它。我從來沒有用PHP編程。 我認爲,函數檢查$ string是11個數字的長度。你能幫我理解這個簡單的PHP函數嗎?
- 但它是如何做到這一點?
- 爲什麼它使用循環而不是簡單的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);
}
}
該函數旨在驗證CPF,巴西等同於US SSN#。 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;
}
}
}
}
?>
稍有偏離主題,但有[CPF]維基百科文章(http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas)驗證僞代碼 - 我會非常*誘惑使用這個而不是上面的PHP代碼。 – 2011-04-30 17:19:50
實現一個計算和檢查控制數字的算法是不是更好?人們可能會嘗試像12345678901這樣的事情,根據您的算法,這將完全正確。查看維基百科的例子:http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas – 2011-04-30 17:22:03
@middaparka和@Emil Vikstrom,不是我的代碼片段中的主要功能嗎? – Mohamad 2011-04-30 17:39:17