@ #脚本

IMEI 是什么

IMEI(International Mobile Equipment Identity)国际移动设备识别码是手机的唯一标识符,用于识别区分全球范围内的移动设备。IMEI码通常由15位数字组成,每段数字都有特定的含义和作用。

IMEI 的组成

  • 前六位(TAC – Type Allocation Code):表示手机的型号和制造商。前六位数字被称为TAC,由GSMA(全球移动通信系统协会)分配给设备制造商,用于标识手机的制造商和型号。
  • 接下来的两位(FAC – Final Assembly Code):FAC用于标识手机的装配地点。
  • 随后的六位(SNR – Serial Number):SNR代表手机的序列号,用于区分同一型号的不同手机。
  • 最后一位(SP – Spare):这是校验位,通常为数字,用于验证IMEI的合法性。

IMEI 的意义

  • 手机追踪和防盗: IMEI码可以用于追踪丢失或被盗手机的位置,帮助用户找回失去的设备。
  • 防止盗窃和欺诈: 移动运营商可以使用IMEI码来阻止盗窃手机的使用,同时还可以防止欺诈活动,例如克隆手机。
  • 质量控制: IMEI码可以用于质量控制和产品保修。制造商可以使用IMEI码来追踪手机的制造和装配过程,确保产品质量。
  • 服务提供商锁定: IMEI码可以用于锁定手机到特定的移动网络服务提供商。这意味着一个特定IMEI的手机只能在特定的网络上使用。

IMEI 的算法

IMEI的最后一位是通过一种算法计算得出的校验位,用于验证IMEI的合法性。该算法基于Luhn算法,也被称为模10算法。以下是Luhn算法的步骤:

  • 将IMEI码的前14位数字分为单数位和双数位。
  • 将双数位数字翻倍,如果结果大于9,则将两位数字相加。
  • 将所有单数位和双数位的数字相加。
  • 将相加的结果取个位数。如果结果为0,则校验位为0,否则,用10减去该结果得到校验位。

通过这种方式,IMEI的校验位可以确保IMEI的有效性和准确性。总的来说,IMEI码不仅是手机的唯一标识符,还具有重要的安全和管理作用。它的结构和校验算法保证了手机在全球范围内的唯一性和合法性。

IMEI 随机生成代码

function imei_gen() {
    var pos;
    var str = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    var sum = 0;
    var final_digit = 0;
    var t = 0;
    var len_offset = 0;
    var len = 15;
    var issuer;

    //
    // Fill in the first two values of the string based with the specified prefix.
    // Reporting Body Identifier list: http://en.wikipedia.org/wiki/Reporting_Body_Identifier
    //

    var rbi = ["01","10","30","33","35","44","45","49","50","51","52","53","54","86","91","98","99"];
    var arr = rbi[Math.floor(Math.random() * rbi.length)].split("");
    str[0] = Number(arr[0]);
    str[1] = Number(arr[1]);
    pos = 2;

    //
    // Fill all the remaining numbers except for the last one with random values.
    //

    while (pos < len - 1) {
        str[pos++] = Math.floor(Math.random() * 10) % 10;
    }

    //
    // Calculate the Luhn checksum of the values thus far.
    //

    len_offset = (len + 1) % 2;
    for (pos = 0; pos < len - 1; pos++) { if ((pos + len_offset) % 2) { t = str[pos] * 2; if (t > 9) {
                t -= 9;
            }
            sum += t;
        }
        else {
            sum += str[pos];
        }
    }

    //
    // Choose the last digit so that it causes the entire string to pass the checksum.
    //

    final_digit = (10 - (sum % 10)) % 10;
    str[len - 1] = final_digit;

    // Output the IMEI value.
    t = str.join('');
    t = t.substr(0, len);
    document.getElementById('fake').value = t;
}

IMEI 更多想象

通过上面的说明,如果我们得到一个真实的 IMEI,也可以通过八位真实的制造商和组装的码和伪造后面六位序列号再加上一位识别码来生成一个伪造的 IMEI。代码如下。

function imei_next(imei) {
	if(!imei || imei.toString().length!=15) return;
	var str = imei.toString().split('');

    var pos;
    //var str = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    var sum = 0;
    var final_digit = 0;
    var t = 0;
    var len_offset = 0;
    var len = 15;
    var issuer;

    console.log(str);

    pos = 8;
    str[len-1] = 0;

    console.log(str);

    while (pos < len - 1) {
        str[pos++] = Math.floor(Math.random() * 10) % 10;
    }

    console.log(str);

    len_offset = (len + 1) % 2;
    for (pos = 0; pos < len - 1; pos++) { if ((pos + len_offset) % 2) { t = str[pos] * 2; if (t > 9) {
                t -= 9;
            }
            sum += t;
        }
        else {
            sum += str[pos]*1;
        }
    }

    //
    // Choose the last digit so that it causes the entire string to pass the checksum.
    //

    final_digit = (10 - (sum % 10)) % 10;
    str[len - 1] = final_digit;
    console.log(str);

    t = str.join('');
    t = t.substr(0, len);
    document.getElementById('txt').value = t;
}

测试链接

声明:仅做技术研究学习用。禁止非法用途。

在线随机IMEI码生成器 | 问道工具网 (wencode.com)

文档信息

更多相关

Node.js request 模块如何自动更新 Set-Cookie

用 Node.js 的 request 抓取页面时,页面经常会有检查用户权限等使用到 Cookie 的场景。实际上处理起来非常简单,直接指定参数 jar 即可。如下代码,代码会自动..