/**
* imei由15位数字组成,
* 前6位(TAC)是型号核准号码,代表手机类型。
* 接着2位(FAC)是最后装配号,代表产地。
* 后6位(SNR)是串号,代表生产顺序号。
* 最后1位 (SP)是检验码。
*
* 检验码计算:
* (1).将偶数位数字分别乘以2,分别计算个位数和十位数之和
* (2).将奇数位数字相加,再加上上一步算得的值
* (3).如果得出的数个位是0则校验位为0,否则为10减去个位数
*
* @author sonzer
*
*/
public class MakeImei {
public static void main(String[] args) {
String imeiString="35566778898256";//前14位
char[] imeiChar=imeiString.toCharArray();
int resultInt=0;
for (int i = 0; i < imeiChar.length; i++) {
int a=Integer.parseInt(String.valueOf(imeiChar[i]));
i++;
final int temp=Integer.parseInt(String.valueOf(imeiChar[i]))*2;
final int b=temp<10?temp:temp-9;
resultInt+=a+b;
}
resultInt%=10;
resultInt=resultInt==0?0:10-resultInt;
System.out.println("imei:"+imeiString+resultInt);
}
}
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 beachIMEI(String begin,String end){
List imeis = new ArrayList();
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校验
///
/// IMEI
///
private bool IMEICheck(string imei)
{
int sum1 = 0, sum2 = 0, temp = 0, total = 0, lastNum = 0;
for (int i = 0; i < 14; i++)
{
if ((i % 2) == 0)
{//奇数位
sum1 = sum1 + int.Parse(imei[i].ToString());
}
else
{//偶数位
temp = (int.Parse(imei[i].ToString())) * 2;
if (temp < 10)
{
sum2 = sum2 + temp;
}
else
{
sum2 = sum2 + 1 + temp - 10;
}
}
}
total = sum1 + sum2;
//获取个位数
if ((total % 10) == 0)
{
lastNum = 0;
}
else
{
lastNum = total % 10;
}
//校验
if ((10 - lastNum) != int.Parse(imei[14].ToString()))
return false;
else
return true;
}