公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
最近安装了一个MyEclipse,需要用到注册码。就在网上找了两种用java代码的实现方法。两种方法产生的注册码不一致,不过都可以使用。
方法一的代码如下:
package com.xttblog.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Calendar; /** * java生成MyEclipse注册码 * @author 业余草 www.xttblog.com * @date 2016年6月12日16:09:20 */ public class GenKeyUtil { private static final String LL = "业余草:www.xttblog.com"; public String getSerial(String userId, String type) { NumberFormat nf = new DecimalFormat("000"); Calendar cal = Calendar.getInstance(); cal.add(Calendar.YEAR, 3); cal.add(Calendar.DAY_OF_YEAR, -1); String licenseNum = nf.format((int) (Math.random() * 1000)); String expTime = new StringBuilder("-").append( new SimpleDateFormat("yyMMdd").format(cal.getTime())).append( "0").toString(); String need = new StringBuilder(userId.substring(0, 1)).append("Y") .append(type).append("-100").append(licenseNum).append(expTime) .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); } private int decode(String s) { int i; char[] ac; int j; int k; i = 0; ac = s.toCharArray(); j = 0; k = ac.length; while (j < k) { i = (31 * i) + ac[j]; j++; } return Math.abs(i); } 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)) { j = (((j - 48) + 5) % 10) + 48; } else if ((j >= 65) && (j <= 90)) { j = (((j - 65) + 13) % 26) + 65; } else if ((j >= 97) && (j <= 122)) { j = (((j - 97) + 13) % 26) + 97; } ac[i] = (char) j; i++; } return String.valueOf(ac); } public static void main(String[] args) { try { System.out.println("please input register name:"); BufferedReader reader = new BufferedReader(new InputStreamReader( System.in)); String userId = null; userId = reader.readLine(); if (userId == null || "".equals(userId)) { System.out.println("name is null"); System.exit(0); } GenKeyUtil myeclipsegen = new GenKeyUtil(); String res = myeclipsegen.getSerial(userId, "E3MS"); System.out.println("Serial:" + res); reader.readLine(); } catch (IOException ex) { ex.printStackTrace(); } } }
方法二的代码如下:
package com.xttblog.util; import java.math.BigInteger; import java.util.Date; import java.util.Random; import java.util.zip.CRC32; /** * java生成MyEclipse注册码 * @author 业余草 www.xttblog.com * @date 2016年6月12日16:09:20 */ public class KeyGenUtil { /** * 获取循环冗余码 * @author 业余草 www.xttblog.com */ private static short getCRC(String str, int i, byte bytes[]) { CRC32 crc32 = new CRC32(); if (str != null){ for (int j = 0; j < str.length(); j++){ crc32.update(str.charAt(j)); } } crc32.update(i); crc32.update(i >> 8); crc32.update(i >> 16); crc32.update(i >> 24); for (int k = 0; k < bytes.length - 2; k++) { crc32.update(bytes[k]); } return (short) (int) crc32.getValue(); } /** * @author 业余草 www.xttblog.com */ private static String encodeGroups(BigInteger biginteger) { BigInteger beginner1 = BigInteger.valueOf(0x39aa400L); StringBuilder sb = new StringBuilder(); for (int i = 0; biginteger.compareTo(BigInteger.ZERO) != 0; i++){ int j = biginteger.mod(beginner1).intValue(); if (i > 0){ sb.append("-"); } sb.append(encodeGroup(j)); biginteger = biginteger.divide(beginner1); } return sb.toString(); } /** * @author 业余草 www.xttblog.com */ public static String encodeGroup(int i){ StringBuilder sb = new StringBuilder(); for (int j = 0; j < 5; j++){ int k = i % 36; char c; if (k < 10){ c = (char) (48 + k); } else { c = (char) ((65 + k) - 10); } sb.append(c); i /= 36; } return sb.toString(); } /** * @author 业余草 www.xttblog.com */ public static String MakeKey(String name, int days, int id){ id %= 100000; byte bkey[] = new byte[12]; bkey[0] = (byte) 1; bkey[1] = 13; Date d = new Date(); long ld = (d.getTime() >> 16); bkey[2] = (byte) (ld & 255); bkey[3] = (byte) ((ld >> 8) & 255); bkey[4] = (byte) ((ld >> 16) & 255); bkey[5] = (byte) ((ld >> 24) & 255); days &= 0xffff; bkey[6] = (byte) (days & 255); bkey[7] = (byte) ((days >> 8) & 255); bkey[8] = 105; bkey[9] = -59; bkey[10] = 0; bkey[11] = 0; int w = getCRC(name, id % 100000, bkey); bkey[10] = (byte) (w & 255); bkey[11] = (byte) ((w >> 8) & 255); BigInteger pow = new BigInteger("89126272330128007543578052027888001981", 10), mod = new BigInteger("86f71688cdd2612ca117d1f54bdae029", 16); BigInteger k0 = new BigInteger(bkey),k1 = k0.modPow(pow, mod); String s0 = Integer.toString(id),sz = "0"; while (s0.length() != 5){ s0 = sz.concat(s0); } s0 = s0.concat("-"); s0 = s0.concat(encodeGroups(k1)); return s0; } public static void main(String[] args){ String name = "xttblog.com"; Random r = new Random(); System.out.println("regName:"+name); System.out.println("regCode:"+MakeKey(name, 0, r.nextInt(100000))); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » Java生成MyEclipse注册码的两种方法