JAVA 批量生成IMEI 源代码

原创 2015年11月17日 17:00:15


JAVA 有规律的批量生成IMEI

手机IMEI码由15-17位数字组成。

第一部分 TAC,Type Allocation Code,类型分配码,由8位数字组成(早期是6位),是区分手机品牌和型号的编码,该代码由GSMA及其授权机构分配。其中TAC码前两位又是分配机构标识(Reporting Body Identifier),是授权IMEI码分配机构的代码,如01为美国CTIA,35为英国BABT,86为中国TAF。

第二部分 FAC,Final Assembly Code,最终装配地代码,由2位数字构成,仅在早期TAC码为6位的手机中存在,所以TAC和FAC码合计一共8位数字。FAC码用于生产商内部区分生产地代码。

第三部分 SNR,Serial Number,序列号,由第9位开始的6位数字组成,区分每部手机的生产序列号。

第四部分 CD,Check Digit,验证码,由前14位数字通过Luhn算法计算得出。

第五部分 SVN,Software Version Number,软件版本号,区分同型号手机出厂时使用的不同软件版本,仅在部分品牌的部分机型中存在。




package com.test.main;

import java.util.ArrayList;
import java.util.List;

public class IMEIGen {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String code = "35254112521400";
		String newCode = genCode(code);
		System.out.println("======"+newCode);
		System.out.println(code+newCode);
		String endCode = "35254112521500";
		beachIMEI(code,endCode);
	}
	
	/**
	 * 批量生成IMEI
	 * @param begin 
	 * @param end
	 * @return
	 */
	static List<String> beachIMEI(String begin,String end){
		List<String> imeis = new ArrayList<String>();
		try {
			long count = Long.parseLong(end) - Long.parseLong(begin);
			Long currentCode = Long.parseLong(begin);
			String code ;
			for (int i = 0; i <= count; i++) {
				code = currentCode.toString();
				code =code+ genCode(code);
				imeis .add(code);
				System.out.println("code====="+code);
				currentCode += 1;			
			}
		} catch (Exception e) {
			e.printStackTrace();
		}	
		
		return imeis;
	}
	
	/**
	 * IMEI 校验码
	 * @param code
	 * @return
	 */
	public static String genCode(String code){
		int total=0,sum1=0,sum2 =0;
		int temp=0;
		char [] chs = code.toCharArray();
		for (int i = 0; i < chs.length; i++) {			
			int num = chs[i] - '0'; 	// ascii to num
			//System.out.println(num);
			/*(1)将奇数位数字相加(从1开始计数)*/
			if (i%2==0) {
				sum1 = sum1 + num;
			}else{
				/*(2)将偶数位数字分别乘以2,分别计算个位数和十位数之和(从1开始计数)*/
				temp=num * 2 ;
				if (temp < 10) {
					sum2=sum2+temp;
				}else{
					sum2 = sum2 + temp + 1 -10;
				}
			}
		}
		total = sum1+sum2;
		/*如果得出的数个位是0则校验位为0,否则为10减去个位数 */
		if (total % 10 ==0) {
			return "0";
		}else{
			return (10 - (total %10))+"";
		}
		
	}

}


IMEI/MEID校验位计算

IMEI是国际移动通讯设备识别号(International Mobile Equipment Identity)的缩写,用于GSM系统。 由15位数字组成,前6位(TAC)是型号核准号码,代表手机...

JAVA 实现 IMEI校验码算法

IMEI校验码算法: (1).将偶数位数字分别乘以2,分别计算个位数和十位数之和 (2).将奇数位数字相加,再加上上一步算得的值 (3).如果得出的数个位是0则校验位为0,否则为10减去个位数 ...

随机生成imei imsi mac

private static String getIMEI() {// calculator IMEI int r1 = 1000000 + new java.util.Random().next...
  • argonwu
  • argonwu
  • 2015年01月21日 18:39
  • 5992

IMEI修改(IMEI第十五位验证码的计算)

最近应客户要求做IMEI修改功能,于是认真的学习了IMEI的编排规则,以及如何算出IMEI: 1、什么是IMEI? IMEI为TAC + FAC + SNR + SP。IMEI(Internati...

Imei 生成-java版

/** * imei由15位数字组成, * 前6位(TAC)是型号核准号码,代表手机类型。 * 接着2位(FAC)是最后装配号,代表产地。 * 后6位(SNR)是串号,代表生产顺序号。 * ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Imei 生成-java版

/** * imei由15位数字组成, * 前6位(TAC)是型号核准号码,代表手机类型。 * 接着2位(FAC)是最后装配号,代表产地。 * 后6位(SNR)是串号,代表生产顺序号。...

利用系统时间实现APP内部随机IMEI和IMSI的方法

前言 我们知道很多APP都有第一次使用的体验功能,如Wifi伴侣,手机第一次使用时就会免费时长;还有很多的APP活动,比如百度糯米、安客居等,还有以前360应用的下载赚金币等等,都是手机的初次使...

14位Imei生成15位-java版

package test; /**  * imei由15位数字组成,  * 前6位(TAC)是型号核准号码,代表手机类型。  * 接着2位(FAC)是最后装配号,代表产地。  * 后6位(SNR)...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA 批量生成IMEI 源代码
举报原因:
原因补充:

(最多只允许输入30个字)