MyEclipse注册机源代码,在线注册

    MyEclipse的三十天的试用期到了,需要注册才能用,百度了下,发现竟然有注册机的源代码啊(//www.blogjava.net/lishunli/archive/2010/01/07/308616.html)于是ctr+c,crl+v用MyEclipse跑了一下,嘿,生成的注册码还真能用啊。其实有个在线注册注册码的网址(http://www.lephones.info),挺好用的。最近培训正好学到servlet,jsp部分,于是就做了一个在线注册版本的(还没学到怎么在网上发布),在局域网里跑了几圈,没问题,发上来大家研究研究。做的比较糙,就当做扔了块砖头吧,不过基本实现了最初的目的。运行的结果是这个样子的:


开发工具:
MyEclipse8.5/apache-tomcat-5.5.23/jdk1.7.0/J2EE1.4Libraries
浏览器:
IE9/Foxfire10

web工程的结构如图所示:



核心代码有三部分,正好契合老师讲到的mvc是软件架构思想

第一部分
    模型:用来封装业务逻辑
    封装指的是,首先要实现业务逻辑,另外,要提供与实现无关的接口,方便调用模块去调用。业务逻辑包含业务数据的加工过程以及为保存加工过程而添加的基础服务代码,比如事务、安全等等)。
=================================================================
package service;

/**
 * MyEclipse6.5注册码_8.5注册码_8.6注册码,为在线注册版,因为考虑到网络访问io流的问题,让类MyEclipseGen实现
 * java.io.Serializable 接口 ;大部分代码来自网络,能不改,就不改;拿来,然后用,一直都是程序员的优秀品质;
 *
 * @author piboo
 * @time 2012-2-26
 */
public class MyEclipseGen implements java.io.Serializable {
    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);
    }

    /**
     * 算法的一部分,看不懂,索性无视它。 有谁能详细介绍下呗?
     * 代码(还有注释)参考http://www.blogjava.net/lishunli/archive/2010/01/07/308616.html;
     *
     * @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;
    }

    /**
     * 下面是必不可少的牛逼闪闪的main方法,只是用来测试,测完就删掉吧。
     * 那么怎样知道控制台打印出来的就是注册码呢?跟"http://www.lephones.info "对比一下吧。
     *
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(getCode("doudou"));
    }
}

=================================================================

第二部分
    控制器:协调模型与视图的。
    视图将请求发送给控制器,控制器调用合适的模型来处理请求;模型处理的结果会发送给控制器,控制器选择合适的视图来显示处理结果。
=================================================================
package web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.MyEclipseGen;

/**
 * mvc(model,view,controller)模式的控制器部分;获得表单中的subscriber数据,让service.
 * MyEclipseGen类完成注册码的生成,然后让 "code.jsp"把生成的注册码显示出来;
 *
 * mvc是一种软件架构的思想,将一个软件的组成部分划分成三种不同类型的模块:分别是模型:(用来封装业务逻辑的
 * "service.MyEclipseGen.java")视图:(实现表示逻辑,提供用户操作接口,
 * 另外也显示模型处理之后的数据"code.jsp")控制器:(协调模型与视图的"web.ActionServlet")
 *
 * @author piboo
 * @time 2012-2-26
 */
public class ActionServlet extends HttpServlet {
    private static final long serialVersionUID = -1321524682165408916L;

    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String subscriber = request.getParameter("subscriber");
        request.setAttribute("subscriber", subscriber); // 把subscriber数据也放在请求中是为了让这个字符串也能够显示在转发后的"code.jsp"页面上;
        String subscription_Code = MyEclipseGen.getCode(subscriber); // 调service.MyEclipseGen注册码的生成方法
        request.setAttribute("subscription_Code", subscription_Code);
        request.getRequestDispatcher("code.jsp").forward(request, response); // 转发到"code.jsp"
    }

}

=================================================================

第三部分
    视图:实现表示逻辑,提供用户操作接口,另外也显示模型处理之后的数据。
=================================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<html>
    <head>
        <title>MyEclipse|在线MyEclipse注册码|MyEclipse6.5注册码|8.5注册码|8.6注册码</title>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <link rel="stylesheet" type="text/css" href="css/style.css" />
    </head>
    <body>
        <div id="wrap">
            <div id="top_content">
                <%@include file="head.jsp"%>
                <div id="content">
                    <p id="whereami">
                    </p>
                    <h1>
                        MyEclipse注册码|MyEclipse6.5注册码|8.5注册码|8.6注册码
                    </h1>
                    <form action="code" method="post">
                        <table cellpadding="0" cellspacing="0" border="0"
                            class="form_table">
                            <tr>
                                <td valign="middle" align="right">
                                    Subscriber:
                                </td>
                                <td valign="middle" align="left">
                                    <input type="text" class="inputgri" name="subscriber" value="${subscriber}"/>
                                </td>
                            </tr>
                            <tr>
                                <td valign="middle" align="right">
                                    Subscription Code:
                                </td>
                                <td valign="middle" align="left"id="subscription_Code">
                                    ${subscription_Code}
                                </td>
                            </tr>
                        </table>
                        <p>
                            <input type="submit" class="button" value="生成注册码 &raquo;" />
                        </p>
                    </form>
                </div>
            </div>
            <%@include file="footer.jsp"%>
        </div>
    </body>
</html>

=================================================================
其他代码连同整个web工程打包如下,需要的可以下载。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值