【问题标题】:IMEI validation functionIMEI验证功能
【发布时间】:2011-06-12 02:41:06
【问题描述】:

有人知道用于 IMEI 验证的 PHP 函数吗?

【问题讨论】:

    标签: php function imei


    【解决方案1】:

    也许可以帮到你:

    This IMEI number is something like this: ABCDEF-GH-IJKLMNO-X (without “-” characters)
    
    For example: 350077523237513
    
    In our example ABCDEF-GH-IJKLMNO-X:
    
    AB is Reporting Body Identifier such as 35 = “British Approvals Board of Telecommunications (BABT)”
    
    ABCDEF is Type Approval Code
    
    GH is Final Assembly Code
    
    IJKLMNO is Serial Number
    
    X is Check Digit
    

    这也可以帮助你:http://en.wikipedia.org/wiki/IMEI#Check_digit_computation

    如果我没有误解,IMEI 编号使用 Luhn 算法。所以你可以谷歌这个:)或者你可以搜索IMEI算法

    【讨论】:

      【解决方案2】:

      也许你对 cme​​ts 中的 imei 验证器有好处: http://www.php.net/manual/en/function.ctype-digit.php#77718

      但我没有测试过

      【讨论】:

      • 有 14 位 15 位和 16 位的 IMEI 号码,也有 IMEI 号码不仅包含数字
      • @VladimirGatev IMEI 号码为 14 位数字 + 1 个校验和。 IMEISV 编号为 14 位数字 + 2 位软件版本数字。此外,一些制造商在 IMEI 末尾添加了诸如 01 之类的内容,但在我见过的所有情况下都可以忽略。
      • Casper - 你能贴出这指的代码吗?
      【解决方案3】:

      IMEI 验证使用 Luhn 检查算法。我找到了一个链接,您可以在其中验证您的 IMEI。此外,本页底部是一段用 JavaScript 编写的代码,用于显示如何计算 IMEI 的第 15 位和有效的 IMEI。我可能会给你一些想法。你可以在这里查看http://imei.sms.eu.sk/index.html

      【讨论】:

        【解决方案4】:

        这是一个可能有用的 jQuery 解决方案:https://github.com/madeinstefano/imei-validator

        【讨论】:

          【解决方案5】:

          短解决方案

          您可以使用this (witchcraft!) solution,只需检查字符串长度:

          function is_luhn($n) {
              $str = '';
              foreach (str_split(strrev((string) $n)) as $i => $d) {
                  $str .= $i %2 !== 0 ? $d * 2 : $d;
              }
              return array_sum(str_split($str)) % 10 === 0;
          }
          function is_imei($n){
              return is_luhn($n) && strlen($n) == 15;
          }
          

          详细解决方案

          这是解释每个步骤的原始函数:

          function is_imei($imei){
              // Should be 15 digits
              if(strlen($imei) != 15 || !ctype_digit($imei))
                  return false;
              // Get digits
              $digits = str_split($imei);
              // Remove last digit, and store it
              $imei_last = array_pop($digits);
              // Create log
              $log = array();
              // Loop through digits
              foreach($digits as $key => $n){
                  // If key is odd, then count is even
                  if($key & 1){
                      // Get double digits
                      $double = str_split($n * 2);
                      // Sum double digits
                      $n = array_sum($double);
                  }
                  // Append log
                  $log[] = $n;
              }
              // Sum log & multiply by 9
              $sum = array_sum($log) * 9;
              // Compare the last digit with $imei_last
              return substr($sum, -1) == $imei_last;
          }
          

          【讨论】:

            【解决方案6】:

            kasperhartwich 玩得很开心

            function validateImei($imei, $use_checksum = true) {
              if (is_string($imei)) {
                if (ereg('^[0-9]{15}$', $imei)) {
                  if (!$use_checksum) return true;
                  for ($i = 0, $sum = 0; $i < 14; $i++) {
                    $tmp = $imei[$i] * (($i%2) + 1 );
                    $sum += ($tmp%10) + intval($tmp/10);
                  }
                  return (((10 - ($sum%10)) %10) == $imei[14]);
                }
              }
              return false;
            }
            

            【讨论】:

              【解决方案7】:

              检查此解决方案

              <?php
              function validate_imei($imei)
              {
                  if (!preg_match('/^[0-9]{15}$/', $imei)) return false;
                  $sum = 0;
                  for ($i = 0; $i < 14; $i++)
                  {
                      $num = $imei[$i];
                      if (($i % 2) != 0)
                      {
                          $num = $imei[$i] * 2;
                          if ($num > 9)
                          {
                              $num = (string) $num;
                              $num = $num[0] + $num[1];
                          }
                      }
                      $sum += $num;
                  }
                  if ((($sum + $imei[14]) % 10) != 0) return false;
                  return true;
              }
              $imei = '868932036356090';
              var_dump(validate_imei($imei));
              ?>
              

              【讨论】:

                猜你喜欢
                • 2012-10-04
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-10-03
                • 1970-01-01
                • 1970-01-01
                • 2022-10-06
                • 2011-10-19
                相关资源
                最近更新 更多