RSS

  • YouTube
  • LinkedIn
  • 谷歌

档案 : PHP

针对 PHP 的公积金验证代码

下面的代码是一个PHP函数,根据文章中的解释,优化为具有最少的圈复杂度 巴西公积金验证方法 - 个人注册. 在第二个数字化测试仪的计算时略有变化. 而不是从第二个数字开始, 代码从第一个开始并使用值 11 作为乘数. 另一个明显的变化是,为了避免比较知道我们是否在第九位和十进制数字, 我将值零分配给最后一个元素 (指数 10) 减少一个比较.

使用的算法是 1 在前面引用的文章中进行了解释,并且有一个小技巧可以避免与其他等于 10 这是制作模块 10 其余的.

   // Codigo que valida um CPF informado quanto a validade de seus dígitos verificadores.

   /**
     * 
     * Verifica se um CPF é válido
     * @author Marcos Regis <marcos@marcosregis.com>
     * @param  string $cpf
     * @return bool
     */
    function validar(string $cpf): bool
    {
        if (strlen($cpf) != 11) {
            return false;
        }
        $elementos = (array)str_split($cpf);
        $elementos[10] = 0; // Reduz uma comparação no calculo de $somaB
        $somaA = 0;
        $somaB = 0;
        foreach ($elementos as $indice => $elemento) {
            $multiplicador = count($elementos) - $indice;
            $somaA += (int)$elemento * (int)($multiplicador > 2 ? $multiplicador - 1 : 0);
            $somaB += (int)$elemento * (int)$multiplicador;
        }

        $moduloA = (($somaA * 10) % 11) % 10;
        $moduloB = (($somaB * 10) % 11) % 10;

        return preg_replace('#\d{9}(\d{2})$#', '$1', $cpf) == $moduloA . $moduloB;
    }

您可以测试此代码 这里.

乌本图上的码头. 服务 nginx 无法生成: ADD 失败: 统计 /var/lib/docker/tmp/docker-builder(;)/startup.sh: 没有这样的文件或目录

乌本图的码头

有时, 使用拉多克时, 在尝试容器重建后,将发生此错误。 no such file or directory 消息上 docker-compose up -d –build nginx 命令.

我不清楚什么是实际问题, 但运行命令与sudo, 我们可以成功运行它.

Seems that the regular user need access rights to directory /var/lib/docker/tmp/ but do not have. So, running with sudo the trouble is bypassed and the build can finished normally.

使用 sudo 构建容器后, 可以卸载它,并重新加载,而无需 sudo.

数据表 + Html 5 出口按钮 + 拉拉维尔-米格 (网络包)

在最后的日子里, 我遇到一个问题,试图使用 数据表 引导 4 支持将结果导出到 Excel Pdf 使用 拉拉维尔-米格. 数小时后,尝试将所有脚本协同工作, 我终于赢了. 所以, 我决定写这个小 如何 对于那些有同样麻烦的人.



继续阅读 > >

在 PDO SQL 语句中绑定多个值 (PDOStatement)

有时, 我们需要在生成 SQL 指令时通过几个列搜索单个值.

假设下表

  • [ENTITY_ONE]
    • Id
    • COLUMN_A
    • COLUMN_B
    • COLUMN_C
    • COLUMN_D
    • COLUMN_E

如果需要搜索列上的单个值 B,DE 我们将需要使用以下指令

选择 ID, COLUMN_A,(...列。。), COLUMN_E 从 ENTITY_ONE 那里 COLUMN_B 喜欢 '%search_value% ' 或 COLUMN_D 象 '%search_value% ' 或 COLUMN_E 象 '%search_value% ';

在 PHP 代码中, 我们可以做

$q = '%search_value% ';
$sql = "选择 * 从 ENTITY_ONE 那里 COLUMN_B 喜欢 ' $q ' 或 COLUMN_D 喜欢 ' $q ' 或 COLUMN_E 喜欢 ' $q '; 
$pdo = 新的 pdo($Dsn, $用户, $通过); 
$stmt = $pdo->;查询($Sql);

很好, this can work but we know that isn’;最好的方法. 我们需要使用绑定值来避免 SQL 注入和其他恶意处理.

所以, 代码可以修改为

$q = '%search_value% '; 
$sql = "选择 * 从COLUMN_B喜欢的地方ENTITY_ONE ? 或COLUMN_D喜欢 ? 或COLUMN_E喜欢 ?; 
$阿格斯= [$问, $问, $问]; // 我们每个条目需要一个条目 "?" on instruction
$pdo = new PDO($Dsn, $用户, $通过); 
$stmt = $pdo->;准备($Sql);
$stmt->;执行($阿格斯);

好多了, 但, 构建复杂的 SQL 指令时, things can be confusing with lots of arguments and don’;别忘了: 订单事项.

愉快的 PDO 可以在使用命名绑定时以不同的顺序绑定值.

$q = '%search_value% '; 
$sql = "选择 * 从COLUMN_B喜欢的地方ENTITY_ONE :first_arg或COLUMN_D喜欢 :second_arg或COLUMN_E喜欢 :third_arg; 

$pdo = 新的 pdo($Dsn, $用户, $通过); 
$stmt = $pdo->;准备($Sql); 
// One way
$args = [':first_arg' =>; $问, ':third_arg' =>;$问, ':second_arg' =>; $问]; // 我们每个条目需要一个条目 ":名字" on instruction 
$stmt->;执行($阿格斯); 
// Another way
$stmt->;bindValue(':third_arg '. $问);
$stmt->;bindValue(':first_arg ', $问); 
$stmt->;bindValue(':second_arg ', $问);

$stmt->;执行(); 

嗯, seems that this isn’;不够好. 我们只改变使用 1-索引占位符 到一个 :命名占位符. There’;没有超出代码可读性的增益, 并且有可能以任何顺序绑定.

是的, 但现在我们可以做最好的方法时, 使用一个独特的搜索词在几列. 我们只能使用一个绑定到一个或多个 :named placeholders ’;因为 PDO 聪明聪明. 看我们的最终代码在这里.

$q = '%search_value% '; 
$sql = "选择 * 从COLUMN_B喜欢的地方ENTITY_ONE :unique_arg或COLUMN_D喜欢 :unique_arg或COLUMN_E喜欢 :unique_arg; 
$pdo = 新的 pdo($Dsn, $用户, $通过); 
$stmt = $pdo->;准备($Sql); 
// One way 
$args = [':unique_arg' =>; $问]; // 我们可以绑定所有 :name with only one term 
$stmt->;执行($阿格斯); 
// Another way 
$stmt->;bindValue(':unique_arg', $问); 
$stmt->;执行(); 

使用相同的参数编写许多 SQL 指令时可以节省大量的输入.

命名文件使用从列表 0 到 Z

今天我编写一些脚本,发现有点小麻烦,使用定义的模式.

模式是创建的文件序列中的开始位置 0 (零) 和不能重复,直到 Z.

示例:

myfile0.ext, myfile1.ext, myfile2.ext, (...), myfile9.ext, myfileA.ext, myfileB.txt, (...), myfileZ.txt

很好, 这不是一个大麻烦,所以我没有使用此代码.

// Filename
$seq = $last_used_seq = '';
$seqs = array_merge(range('0','9'), range('A', 'Z'));]
$l = 1;
while (!in_array($seq, $seqs)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

$seq

做不了的预期值 0 (零) 第一次运行. 相反, 它是空白.

调试的变量, 看到了, while 从来没有计算结果为 true. 试图复制在命令行上发现

in_array($seq, $seqs);

始终返回 true. 我试着用 “”, “R” 无论什么价值,我用, 仍在返回 true.

所以我更改为使用 STRICT 理由 in_array to true and works for ‘;A’; through ‘;Z’;, but not for ‘;0; through ‘;9;.

while (!in_array($seq, $seqs, true)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

Damn…; PHP 是正确, ;0; 严格来说并不等于 0. 的 Chr 函数返回值 string

范围('' 0, '' 9)

创建 arrayinteger 值.

所以, 我改变了方法来评估所有的值 STRICT, 因为我想要创建一个干净整洁的代码没有其他要使用的函数.

This is the final code that I’;m 使用:

// 最初的值 $seq = ';
$seqs = array_merge(范围(ord('' 0),ord('' 9)), 范围(ord(' A'), ord(' Z')));
$seqs = array_map(chr', $seqs);
$l = 1;
同时 (!in_array($seq, $seqs, 真正的)) {
    $seq = chr(ord($新闻电台['' last_seq]) + $l + +);
}

// 文件名 foreach ($itens_for_files as $key =>; $条 】) {
    // ... 另一种代码,以填充文件 $seq = chr(ord($seq) + 1);
    同时 (!in_array($seq, $seqs, 真正的)) {
    $seq = chr(ord($seq) + 1);
    $文件名 = myfile . $seq . ''.ext;
    // ...
}

你甚至可以看到, 我改变了 $seqs initial values from ‘;0; 到你 ASCII 代码和回到你给了我的价值 array 与中的所有值 string 类型.

见你!

PHP 比较错误

今天, 我在写一个脚本在 PHP 使用在命令行中,当遇到了意外的行为 (至少对我而言).
该脚本应接收三个参数, 其中最后一个包含一个或多个数字代码列表.
尝试验证此最后一个参数得到一个不同的结果,比想象中.
看到我正在使用的代码片段:

// test.php 如果 (php_sapi_name() = = 'cli') {
    $di = 设定($argv[1]) ? $argv[1] : 日期(' Y-m-' d); // 初始日期 $df = 设定($argv[2]) ? $argv[2] : 日期(' Y-m-' d); // 最后日期 $prods = 设定($argv[3]) ? 爆炸(',', $argv[3]) : 数组(); // 代码列表

    ##### 验证
    // 如果,初始日期 ($迪 != 日期(' Y-m-' d, strtotime($迪))) {
        回声 "\n";
        回声 "错误! 初始日期无效!\n";
        退出;
    }
    // 决赛日期如果 ($df != 日期(' Y-m-' d, strtotime($df))) {
        回声 "\n";
        回声 "错误! 无效的最后日期!\n";
        退出;    
    }

    // 如果,代码 (计数($电棒) >; 0) {
        foreach ($作为 $prod 刺) {
            如果 ($产品 != (int)$产品) {
                回声 "\n";
                回声 "错误! 代码 " . $产品 . " 是无效的!\n" ;
                退出;
            }
        }
    }
    回声 "完成!";
}

继续阅读 > >

转换 xor, 自发性高血压大鼠和 PHP 的 Delphi shl

我感到迁移国产软件 特尔斐PHP 和我碰到的一个问题 他妈的 祝福加密功能.

我遭受到一点并试图重写函数,代码和结果的差异的复杂性.

函数使用运算符 异或SHR 在 Delphi 版本. 自发性高血压大鼠是相对容易的谢谢,体验到与按位运算符和 Delphi 文档如何说操作员拉掉位向右

继续阅读 > >