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+序列号生成代码。先贴着。
相关文章推荐
- JAVA调用条码打印机打印二维码
- Java web学习(五)
- Java生成二维码方法
- Spring AOP的两种代理方式
- Java中Runnable和Thread的区别
- maven项目中出现javac错误处理办法:
- Java异常分类
- eclipse快捷键使用总结
- eclipse创建一个maven项目(父项目和子模块)举例
- 【Struts2进阶】Struts2深度解析ModelDriven原理
- SpringMVC文件上传 多文件上传实例
- eclipse汉化出错问题
- Java超神之路
- leetcode 练习——add two numbers (Java)
- 短信中的的 UCS2的编码与解码方法(java)
- java内存泄漏原因
- eclipse 配置Maven问题解决办法
- 计算一个Java对象占用字节数的方法
- leetcode:Odd Even Linked List 【Java】
- JAVA作业