您的位置:首页 > 编程语言 > Java开发

Java生成MyEclipse8.6+序列号代码

2016-03-10 21:16 615 查看
import java.io.Serializable;

/**
* MyEclipse6.5注册码_8.5注册码_8.6注册码,为在线注册版,因为考虑到网络访问io流的问题,让类MyEclipseGen实现 java.io.Serializable 接口 ;
* 大部分代码来自网络,能不改,就不改;拿来,然后用,一直都是程序员的优秀品质;
*/
public class MyEclipseGen implements Serializable {
/**
*
* @param args
*/
public static void main(String[] args) {
String key = "haha";
System.out.println(key);
System.out.println(getCode(key));
}

private static final long serialVersionUID = 7684560663783083527L; // 加上serialVersionUID属性是为了保持JDK版本的兼容性,可不加,不知道理解的对不对;

private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";

public MyEclipseGen() { // 空构造器原则上必须加
super();
}

/**
* 具体的Subscription Code生成算法
*
* @param userId
*            用户名
* @param licenseNum
*            这个可能是由MyEclipse的版本号决定的,我只见过"1"和"5"的情况;此程序选择的"5",支持MyEclipse6.5, 8.5,8.6版本;
* @return 用户名所对应注册码
*/
public String getSerial(String userId, String licenseNum) {
java.util.Calendar cal = java.util.Calendar.getInstance(); // 获得当前日期
cal.add(1, 3); // +3年
cal.add(6, -1); // 当前日-1
java.text.NumberFormat nf = new java.text.DecimalFormat("000");
licenseNum = nf.format(Integer.valueOf(licenseNum)); // licenseNum格式化成三位数字
String verTime = new StringBuilder("-").append(new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime())).append("0").toString(); // 日期
String type = "YE3MP-";
String need = new StringBuilder(userId.substring(0, 1)).append(type).append("300").append(licenseNum).append(verTime).toString(); // 初步注册信息
String dx = new StringBuilder(need).append(LL).append(userId).toString();
int suf = this.decode(dx); // 编码初步注册信息
String code = new StringBuilder(need).append(String.valueOf(suf)).toString();
return this.change(code);
}

/**
* 算法的一部分,看不懂,索性无视它。
*
* @param s
* @return
*/
private int decode(String s) {
int i;
char[] ac;
int j;
int k;
i = 0;
ac = s.toCharArray(); // 把s转化为单个字符数组
j = 0;
k = ac.length;
while (j < k) {
i = (31 * i) + ac[j]; // 加密算法,不理解为什么这样子?有可能就是这样子定义的
j++;
}
return Math.abs(i); // 取绝对值
}

/**
* 变化原则是 把数字(10个)或者字母表(大小写各26个)折半对调(两个相互改变),也即 0与5对调(0变5,5变0) A与N,a与n对调
*
* @param s
*            原字符串
* @return 变化后的字符串
*/
private String change(String s) {
byte[] abyte0;
char[] ac;
int i;
int k;
int j;
abyte0 = s.getBytes();
ac = new char[s.length()];
i = 0;
k = abyte0.length;
while (i < k) {
j = abyte0[i];
if ((j >= 48) && (j <= 57)) { // 0-9,实现01234和56789相应的相互对调,也即0与5对调,1与6对调
j = (((j - 48) + 5) % 10) + 48;
} else if ((j >= 65) && (j <= 90)) { // A-Z
j = (((j - 65) + 13) % 26) + 65;
} else if ((j >= 97) && (j <= 122)) { // a-z
j = (((j - 97) + 13) % 26) + 97;
}
ac[i] = (char) j;
i++;
}
return String.valueOf(ac);
}

/**
* 增加这个方法是为了方便servlet(web.ActionServlet)调用
*
* @param subscriber
*            用户名
* @return subscription_Code 用户名所对应的注册码;
*/
public static String getCode(String subscriber) {
MyEclipseGen myeclipsegen = new MyEclipseGen();
String subscription_Code = myeclipsegen.getSerial(subscriber, "5"); // 后面的参数是一个数字类型的字符串,数字范围为0-999
return subscription_Code;
}

}


MyEclipse8.6+序列号生成代码。先贴着。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: