skyleaf/cellular-identifier

将不同规范和格式的移动设备标识符进行转换。

1.0.2 2016-03-31 16:15 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:09:46 UTC


README

Build Status

为什么存在这个项目?

移动设备标识符可以具有多种不同的格式,并遵循多个规范。因此,同一设备可能被多个不同的设备标识符引用,这是一个问题,因为移动设备序列号通常用作唯一标识符。

这个类将允许您将一个移动设备识别号码从一种格式转换为另一种格式(十六进制到十进制和相反),并从一种规范转换为另一种规范(例如,从MEID到伪ESN)。

如果未来出现任何额外的移动标识符规范和格式,这个类可以很容易地进行修改以包含它们。

我该如何使用这个项目?

检查给定标识符是否有效

  $identifier = new CellularIdentifier('A1000001FFFFFF');

  if($identifier) {
    // Iterate over identifier results.
  } else {
    // Do error handling.
  }

在格式之间转换;返回单个值

  $identifier = new CellularIdentifier('123456789012345678');
  if ($identifier) {
    $identifier->specification(); // 'meid'
    $identifier->format(); // '10'

    $pseudo_esn = $identifier->hex()->esn()->value(); // '80FFFFFF'
    $identifier->specification(); // 'esn'
    $identifier->format(); // '16'

    // You could have also done $identifier->esn()->hex()->value().
  }

在多个格式之间转换;返回多个值

  $identifier = new CellularIdentifier('99990000000000');

  if ($identifier) {
    // Do as many conversions as you want.
    $identifier->hex()->dec()->esn()->hex()->dec();

    // Only the valid spec/format values for the given identifier will be non-null.
    foreach ($identifier as $specification_and_format => $value) {
      if (isset($value)) {
        print $specification_and_format . $value . "\n";
      }
    }
  }

计算校验位

  $identifier = new CellularIdentifier('99990000000001');

  if ($identifier) {
    $check_digit = $identifier->checkDigit();
  }

这个类是如何工作的?

  1. 正则表达式确定给定标识符的规范和格式。
  2. 从给定标识符缓存值。
  3. 在标识符对象上调用转换方法。
  4. 从数组中检索转换函数。
  5. 将转换函数应用于标识符对象。
  6. 转换函数的返回值被缓存。
  7. 对象内部状态更改以反映最近的转换。

由于使用了大量的字符串来引用转换函数和缓存值,您会注意到大量使用 AbstractClass::someconstant。这是为了减少运行时错误,因为误输入字符串,同时也提供了一个概念模型,表明“这些是规范和格式,而不仅仅是字符字符串。”使用抽象类常量是模仿PHP中的enum的最简单方法。

此外,您还会注意到我们不得不采取一些自由,以使这个类在PHP 5.3中工作,PHP 5.3有一些关于数组键和闭包的小缺陷。

限制

所有十进制MEID输入

MEID和IMEI之间存在一些混淆。一些设备,如摩托罗拉全球手机,有两个独立的无线电;在这种情况下,IMEI和MEID将没有任何关系。一些设备,如苹果iPhone,使用IMEI作为MEID。从计算的角度来看,IMEI是十进制,而MEID是十六进制;这意味着十进制IMEI(基数为10)和十进制MEID(基数为16)的校验位计算将不同,尽管它们包含相同的十进制数字。因此,如果您使用可能既是IMEI又是MEID的十进制模式实例化一个CellularIdentifier对象,我们假设该模式是IMEI。

校验位计算

仅支持十进制IMEI的校验位计算。