我想知道这个函数是如何工作的,所以我可以在ColdFusion中重写它。我从来没有用PHP编程。 我认为,该函数会检查$ string的长度是否为11个数字。
我读了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,巴西相当于美国SSN#。 CPF的长度为11个字符。基本上,我需要知道它在做什么,所以我可以在Coldfusion中编写函数。
如果它只是一个长度,不能是if (len(cpf) != 11) return false;
?
以下是您感兴趣的整个代码段:
<?
/*
*@ Class VALIDATE - It validates Brazilian CPF/CNPJ numbers
*@ Developer: André Luis Cupini - andre@neobiz.com.br
************************************************************/
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;
}
}
}
}
?>
答案 0 :(得分:2)
它基本上确保数字不是:
11111111111
22222222222
33333333333
44444444444
55555555555
等...
答案 1 :(得分: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次的相同数字。