联通iccid 19转20 使用luhn 算法的计算公式

联通iccid 19转20 使用luhn 算法的计算公式

第一次对接iccid 才知道 使用的是luhn 算法 19转20位

当时也是一脸懵逼 的状态,然后各种chatgpt 寻找,怎么找都发现不对,最后看到这片java的文章实验是正确的,因为像这种好多鉴权、加密、升级等都是java的,还没有文档,只能试着去碰,最后终于对了

原文的思路,然后从java 改成php

ICCID共20位, 最后一位的校验位计算规则如下:

  1. 取前19位 . 从左到右奇数位开始. 乘以2 然后计算个位与十位数之和.

  2. 将所有偶数位的数字与上一步得到的值全部相加

  3. 将上一步得到的值乘以9 然后取余. 得到的值就是第20位的校验位

例: 89860262191507034404 最后一位校验位是4

在这里插入图片描述

第三行相加 1+6+9+1+6+6+0+2+1+2+2+2+9+2+5+0+7+0+3+8+4+0=76

最后 76*9 = 684

校验位就是 684%10=4 各位可以到 验证该计算方法.`

代码如下,希望能帮到大家
/**
     * @param string $iccid
     * @return int|string
     */
    public function checkLuhn($iccid = '')
    {
        $strLen = strlen($iccid);
        if ($strLen == 19) {
            $rest = 0;
            for ($i = 0; $i < $strLen; $i++) {
                if($i % 2 == 0){
                    $oddNum = $iccid[$i] * 2;
                    $rest += intval($oddNum / 10) + $oddNum % 10;
                } else {
                    $rest += $iccid[$i];
                }
            }
            $rest  = $rest * 9;
            $str =  $rest % 10;
        } else {
            $str =  6;
        }
        return $iccid. $str;
    }

相关推荐

  1. 电机转速&计算公式

    2024-03-30 12:12:03       64 阅读
  2. 2023-12-27 语音文字whisper应用部署

    2024-03-30 12:12:03       62 阅读
  3. 边缘计算联邦学习联系

    2024-03-30 12:12:03       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 12:12:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 12:12:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 12:12:03       87 阅读
  4. Python语言-面向对象

    2024-03-30 12:12:03       96 阅读

热门阅读

  1. Shell脚本基础 以及 变量和引用

    2024-03-30 12:12:03       38 阅读
  2. 数据按日期周期的分组聚合

    2024-03-30 12:12:03       41 阅读
  3. 设计模式(6):桥接模式

    2024-03-30 12:12:03       45 阅读
  4. 常用设计模式

    2024-03-30 12:12:03       36 阅读
  5. Flume和Kafka的区别

    2024-03-30 12:12:03       42 阅读
  6. c语音函数大全(W开头)

    2024-03-30 12:12:03       44 阅读
  7. ORACLE 存中文

    2024-03-30 12:12:03       35 阅读