<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>szjiang</title>
    <description></description>
    <link>http://szjiang.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>表单验证框架</title>
        <author>szjiang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://szjiang.javaeye.com">szjiang</a>&nbsp;
          链接：<a href="http://szjiang.javaeye.com/blog/142040" style="color:red;">http://szjiang.javaeye.com/blog/142040</a>&nbsp;
          发表时间: 2007年11月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>【转】</p>
<p>
<table cellspacing="0" border="0" width="100%" cellpadding="2">
    <tbody>
        <tr>
            <td>表单的验证一直是网页设计者头痛的问题，表单验证类 Validator就是为解决这个问题而写的，旨在使设计者从纷繁复杂的表单验证中解放出来，把精力集中于网页的设计和功能上的改进上。</td>
        </tr>
        <tr>
            <td>&nbsp;&nbsp;&nbsp; Validator是基于JavaScript技术的伪静态类和对象的自定义属性，可以对网页中的表单项输入进行相应的验证，允许同一页面中同时验证多个表单，熟悉接口之后也可以对特定的表单项甚至仅仅是某个字符串进行验证。因为是伪静态类，所以在调用时不需要实例化，直接以&quot;类名+.语法+属性或方法名&quot;来调用。此外，Validator还提供3种不同的错误提示模式，以满足不同的需要。</td>
        </tr>
        <tr>
            <td>Validator目前可实现的验证类型有：</td>
        </tr>
        <tr>
            <td>1.是否为空；<br />
            2.中文字符；<br />
            3.双字节字符<br />
            4.英文；<br />
            5.数字；<br />
            6.整数；<br />
            7.实数；<br />
            8.Email地址；<br />
            9.使用HTTP协议的网址；<br />
            10.电话号码；<br />
            11.货币；<br />
            12.手机号码；<br />
            13.邮政编码；<br />
            14.身份证号码；<br />
            15.QQ号码；<br />
            16.日期；<br />
            17.符合安全规则的密码；<br />
            18.某项的重复值；<br />
            19.两数的关系比较；<br />
            20.判断输入值是否在(n, m)区间；<br />
            21.输入字符长度限制(可按字节比较)；<br />
            22.对于具有相同名称的单选按钮的选中判断；<br />
            23.限制具有相同名称的多选按钮的选中数目；<br />
            24.自定义的正则表达式验证；</td>
        </tr>
        <tr>
            <td>运行环境(客户端)：</td>
        </tr>
        <tr>
            <td>在Windows Server 2003下用IE6.0+SP1和Mozilla Firefox 1.0测试通过；<br />
            在Lunix RedHat 9下的Netscape测试通过；</td>
        </tr>
    </tbody>
</table>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://szjiang.javaeye.com/blog/142040#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 20 Nov 2007 14:46:00 +0800</pubDate>
        <link>http://szjiang.javaeye.com/blog/142040</link>
        <guid>http://szjiang.javaeye.com/blog/142040</guid>
      </item>
      <item>
        <title>模拟网页对话框</title>
        <author>szjiang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://szjiang.javaeye.com">szjiang</a>&nbsp;
          链接：<a href="http://szjiang.javaeye.com/blog/138043" style="color:red;">http://szjiang.javaeye.com/blog/138043</a>&nbsp;
          发表时间: 2007年11月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">css 代码</div>
<p>公司有个项目中的一个功能需要频繁的用到打开窗口操作，window.open()和window.showModalDialog()方法均感觉有点不合适。无奈之举，只能自己用层模拟一个了。</p>
<p>首先要定义个用户锁屏的DIV层；样式如下：</p>
<div class="code_title">css 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-css">
    <li class="alt"><span><span class="colors">#screen</span><span>Div{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">width</span><span>:100%; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">height</span><span>:100%; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">background</span><span>:</span><span class="colors">#cccccc</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">position</span><span>:</span><span class="string">absolute</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">left</span><span>:0;</span><span class="keyword">right</span><span class="string">right</span><span>:0;</span><span class="string">top</span><span>:0; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;filter:alpha(opacity=50); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">display</span><span>:</span><span class="string">none</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p>再定义三个层，分别用于标题，关闭按钮，信息。对应的样式如下：</p>
<div class="code_title">css 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-css">
    <li class="alt"><span><span class="colors">#infoDi</span><span>v&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">position</span><span>:</span><span class="string">absolute</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">width</span><span>:</span><span class="string">0px</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">height</span><span>:</span><span class="string">0px</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">z-index</span><span>:10; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">border</span><span>:</span><span class="string">1px</span><span>&nbsp;</span><span class="string">solid</span><span>&nbsp;</span><span class="colors">#000000</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">background-color</span><span>:&nbsp;</span><span class="colors">#FFFFFF</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">visibility</span><span>:&nbsp;inherit; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">display</span><span>:</span><span class="string">none</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="colors">#closeD</span><span>iv&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">position</span><span>:</span><span class="string">absolute</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">width</span><span>:</span><span class="string">15px</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">height</span><span>:</span><span class="string">15px</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">z-index</span><span>:11; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">border-right</span><span>:</span><span class="string">1px</span><span>&nbsp;</span><span class="string">solid</span><span>&nbsp;</span><span class="colors">#000000</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">border-top</span><span>:</span><span class="string">1px</span><span>&nbsp;</span><span class="string">solid</span><span>&nbsp;</span><span class="colors">#000000</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">background-color</span><span>:&nbsp;</span><span class="colors">#FFFFFF</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">visibility</span><span>:&nbsp;</span><span class="string">visible</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">display</span><span>:</span><span class="string">none</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">overflow</span><span>:&nbsp;</span><span class="string">hidden</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="colors">#titleD</span><span>iv&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">position</span><span>:</span><span class="string">absolute</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">width</span><span>:</span><span class="string">0px</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">height</span><span>:</span><span class="string">15px</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">z-index</span><span>:11; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">border-left</span><span>:</span><span class="string">1px</span><span>&nbsp;</span><span class="string">solid</span><span>&nbsp;</span><span class="colors">#000000</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">border-top</span><span>:</span><span class="string">1px</span><span>&nbsp;</span><span class="string">solid</span><span>&nbsp;</span><span class="colors">#000000</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">background-color</span><span>:&nbsp;</span><span class="colors">#FFFFFF</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">visibility</span><span>:&nbsp;</span><span class="string">visible</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">display</span><span>:</span><span class="string">none</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">overflow</span><span>:&nbsp;</span><span class="string">hidden</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=1,startColorStr=</span><span class="colors">#2c7fac</span><span>,endColorStr=</span><span class="colors">#ffffff</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>最后再增加相应的拖放事件即可。</p>
<span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span>
<div class="code_title">js 代码</div>
<li class="">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="comment">//拖放层事件 </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;iDiffX=0; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;iDiffY=0;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">function</span><span>&nbsp;handleMouseDown(e){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;titleDiv&nbsp;=&nbsp;document.getElementById(</span><span class="string">&quot;titleDiv&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iDiffX&nbsp;=&nbsp;e.clientX-titleDiv.offsetLeft; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iDiffY&nbsp;=&nbsp;e.clientY-titleDiv.offsetTop; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.onmousemove=</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;infoDiv&nbsp;=&nbsp;document.getElementById(</span><span class="string">&quot;infoDiv&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;closeDiv&nbsp;=&nbsp;document.getElementById(</span><span class="string">&quot;closeDiv&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;titleDiv&nbsp;=&nbsp;document.getElementById(</span><span class="string">&quot;titleDiv&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;infoDiv.style.left&nbsp;=&nbsp;e.clientX-iDiffX; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;infoDiv.style.top&nbsp;=&nbsp;e.clientY-iDiffY; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closeDiv.style.left&nbsp;=&nbsp;e.clientX+500-15-iDiffX; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closeDiv.style.top&nbsp;=&nbsp;e.clientY-iDiffY; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;titleDiv.style.left&nbsp;=&nbsp;e.clientX-iDiffX; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;titleDiv.style.top&nbsp;=&nbsp;e.clientY-iDiffY; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.onmouseup=</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.onmousemove=</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.onmouseup=</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<div></div>
<p>&nbsp;<span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span>大家参考下。提提意见。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
</li>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
          <br/>
          <span style="color:red;">
            <a href="http://szjiang.javaeye.com/blog/138043#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 05 Nov 2007 13:12:00 +0800</pubDate>
        <link>http://szjiang.javaeye.com/blog/138043</link>
        <guid>http://szjiang.javaeye.com/blog/138043</guid>
      </item>
      <item>
        <title>CRM中的销售管理</title>
        <author>szjiang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://szjiang.javaeye.com">szjiang</a>&nbsp;
          链接：<a href="http://szjiang.javaeye.com/blog/119952" style="color:red;">http://szjiang.javaeye.com/blog/119952</a>&nbsp;
          发表时间: 2007年09月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">(转)</span></p>
<p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">最近几家客户正在选</span><span style="FONT-SIZE: 12pt">CRM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">系统，接触了不少</span><span style="FONT-SIZE: 12pt">CRM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">厂商之后，客户感觉有些概念有些模糊，因此我觉得对这几个概念进行澄清，希望对企业的选型和实施都能有些帮助。</span></p>
<p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">首先</span><span style="FONT-SIZE: 12pt">CRM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">中销售管理，通常叫</span><span style="FONT-SIZE: 12pt">SFA</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">，管理的是销售订单的形成过程，是指从获得销售线索开始到成单的整个过程的管理，</span><span style="FONT-SIZE: 12pt"> ERP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">也有销售管理，</span><span style="FONT-SIZE: 12pt">SAP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">叫</span><span style="FONT-SIZE: 12pt">SD</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">，</span><span style="FONT-SIZE: 12pt">Oracle</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">叫</span><span style="FONT-SIZE: 12pt">OM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">，管理的是销售订单的实现过程，是指客户确认订单开始到发货至客户付款的全过程，很多公司通过商务部来管理这个过程，一个是拿单，一个是做单，相当于售前和售后的过程，二者是相互衔接的。</span></p>
<p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">对于一个复杂的销售过程而言，一般</span><span style="FONT-SIZE: 12pt">CRM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">系统处理的逻辑是：</span></p>
<p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">销售线索－</span><span style="FONT-SIZE: 12pt">&gt;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">销售机会－</span><span style="FONT-SIZE: 12pt">&gt;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">销售合同－</span><span style="FONT-SIZE: 12pt">&gt;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">销售订单</span></p>
<p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">销售线索确认后就成为销售机会，销售机会成功了，变成销售合同，销售合同转化为销售订单。</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">销售线索、销售机会、销售合同和销售订单一起形成一个销售漏斗的过程。</span></p>
<p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">销售线索是市场和销售职能的切分点，销售订单是销售和商务的职能切分点。销售线索的获取、维护和确认是市场的职能，市场的一个重要功能就是获取尽可能多的销售线索，把销售漏斗的前端做大，利用的手段就是市场活动，包括广告、展会、直邮等多种形式。</span></p>
<p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">销售线索确认后，就可以转化为销售机会（有些系统称为商机），进入销售机会的管理过程，相对于销售线索而言，销售机会有更多实质性的销售活动，比如与客户深入的沟通，提供解决方案，解决方案讨论，商务报价，合同谈判等，而销售线索的管理过程相对简单，比如寄送技术资料，问题回复，电话沟通等，多为不与客户面对面的活动。销售线索的管理过程是否需要，要看一个公司销售过程的复杂程度和销售周期以及实际需要而定，对于某些公司而言，销售过程相对紧凑，就不需要销售线索的管理过程，而直接进入销售机会的管理过程，这样对</span><span style="FONT-SIZE: 12pt">CRM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">系统而言，可以不启用销售线索的功能。</span></p>
<p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">对于更加复杂的销售过程，比如一些大型项目的销售机会，涉及到企业多个部门之间的协同，销售活动多而复杂，对时间节点和销售活动的控制都很重要，需要一个团队来跟进销售机会，这样一般销售机会的管理功能就会显得薄弱，所以有些</span><span style="FONT-SIZE: 12pt">CRM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">系统中把项目型销售机会的管理用项目管理的方式来进行管理。当然，项目管理的功能是一个通用功能，它不但可以用来管理复杂的销售机会，也可用用来管理复杂的市场活动等。那二者如何区分呢，系统中通过项目的来源类型和来源</span><span style="FONT-SIZE: 12pt">ID</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">来进行区分，来源类型是销售线索或者销售机会，则项目是销售类的，如果来源类型是市场活动，则是市场类的。同时系统在项目类型本身的定义上，也进行市场、销售甚至其他类型项目的区别。另外一个问题是，销售机会是可以进行销售预测的，用项目管理销售机会是否可以进行销售预测呢？这个问题不用担心，如果是这样的</span><span style="FONT-SIZE: 12pt">CRM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">系统，在销售预测时，系统可以让用户选择预测的范围，可以单独预测一般的销售机会，可以单独预测销售项目，也可以对二者同时进行合并预测。</span></p>
<p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">销售机会成功后，就可以转化为销售合同，合同规定销售的产品和服务就可以转化为销售订单，对于不是特别复杂的产品和服务销售，销售合同未必是一个必须的管理环节，可以直接将销售机会转化为销售订单，一旦销售订单确定，就进入商务处理的环节了。</span></p>
<p style="MARGIN: 3pt 0cm; TEXT-INDENT: 24pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在</span><span style="FONT-SIZE: 12pt">CRM</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">系统中，一个完整的销售过程可以经历<a name="OLE_LINK3" title="OLE_LINK3"></a>销售线索、销售机会、销售合同和销售订单的所有过程，系统可以将这些对象关联在一起，关联的手段就是来源类型和来源</span><span style="FONT-SIZE: 12pt">ID</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">。当然，在系统中也可直接创建销售线索、销售机会、销售合同和销售订单中的任何一个业务对象，来源对象可被标记为&quot;直接创建&quot;，则创建对象之前的业务对象在系统中就没有了，因为其管理过程已经不再需要了。</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://szjiang.javaeye.com/blog/119952#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 03 Sep 2007 22:26:37 +0800</pubDate>
        <link>http://szjiang.javaeye.com/blog/119952</link>
        <guid>http://szjiang.javaeye.com/blog/119952</guid>
      </item>
      <item>
        <title>对注册码生成的浅谈.</title>
        <author>szjiang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://szjiang.javaeye.com">szjiang</a>&nbsp;
          链接：<a href="http://szjiang.javaeye.com/blog/118733" style="color:red;">http://szjiang.javaeye.com/blog/118733</a>&nbsp;
          发表时间: 2007年08月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近为了手头的一个小项目,需要生成一个注册码.并且要求注册码中包含日期信息.</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;mypackage; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.io.File; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.io.FileInputStream; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.io.FileOutputStream; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.io.InputStream; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.io.OutputStream; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.security.*; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.text.DateFormat; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.text.ParseException; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.util.Date; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.util.Properties; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.util.Random; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.crypto.Cipher; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;javax.crypto.SecretKey; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.crypto.SecretKeyFactory; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;javax.crypto.spec.DESKeySpec; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;字符串工具集合 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;Liudong </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;StringTest&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;PASSWORD_CRYPT_KEY&nbsp;=&nbsp;</span><span class="string">&quot;.?'_=1dt&quot;</span><span>;</span><span class="comment">//&nbsp;密钥 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;DES&nbsp;=&nbsp;</span><span class="string">&quot;DES&quot;</span><span>;</span><span class="comment">//DES算法名称 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;realKey;</span><span class="comment">//&nbsp;真实注册码 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;StringTest的构造器. </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;arg </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;StringTest(</span><span class="keyword">boolean</span><span>&nbsp;arg)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;r&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Random(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!arg){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;realKey&nbsp;=&nbsp;r.nextLong()+</span><span class="string">&quot;:&quot;</span><span>+String.valueOf(System.currentTimeMillis()); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateFormat&nbsp;df&nbsp;=&nbsp;DateFormat.getDateInstance(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;d&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;df.parse(</span><span class="string">&quot;1981-06-27&nbsp;00:00:02&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(ParseException&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;realKey&nbsp;=&nbsp;r.nextLong()+</span><span class="string">&quot;:&quot;</span><span>+String.valueOf(d.getTime()); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;加密 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;src </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据源 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;key </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;密钥，长度必须是8的倍数 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;返回加密后的数据 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;encrypt(</span><span class="keyword">byte</span><span>[]&nbsp;src,&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;key)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;DES算法要求有一个可信任的随机数源 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecureRandom&nbsp;sr&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;SecureRandom(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;从原始密匙数据创建DESKeySpec对象 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DESKeySpec&nbsp;dks&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;DESKeySpec(key); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;创建一个密匙工厂，然后用它把DESKeySpec转换成 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;一个SecretKey对象 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecretKeyFactory&nbsp;keyFactory&nbsp;=&nbsp;SecretKeyFactory.getInstance(DES); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecretKey&nbsp;securekey&nbsp;=&nbsp;keyFactory.generateSecret(dks); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Cipher对象实际完成加密操作 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cipher&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance(DES); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;用密匙初始化Cipher对象 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.ENCRYPT_MODE,&nbsp;securekey,&nbsp;sr); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;现在，获取数据并加密 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;正式执行加密操作 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;cipher.doFinal(src); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;解密 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;src </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据源 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;key </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;密钥，长度必须是8的倍数 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;返回解密后的原始数据 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;decrypt(</span><span class="keyword">byte</span><span>[]&nbsp;src,&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;key)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;DES算法要求有一个可信任的随机数源 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecureRandom&nbsp;sr&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;SecureRandom(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;从原始密匙数据创建一个DESKeySpec对象 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DESKeySpec&nbsp;dks&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;DESKeySpec(key); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;创建一个密匙工厂，然后用它把DESKeySpec对象转换成 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;一个SecretKey对象 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecretKeyFactory&nbsp;keyFactory&nbsp;=&nbsp;SecretKeyFactory.getInstance(DES); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecretKey&nbsp;securekey&nbsp;=&nbsp;keyFactory.generateSecret(dks); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Cipher对象实际完成解密操作 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cipher&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance(DES); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;用密匙初始化Cipher对象 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.DECRYPT_MODE,&nbsp;securekey,&nbsp;sr); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;现在，获取数据并解密 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;正式执行解密操作 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;cipher.doFinal(src); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;二行制转字符串 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;b </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;byte2hex(</span><span class="keyword">byte</span><span>[]&nbsp;b)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hs&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;stmp&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;n&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;n&nbsp;&lt;&nbsp;b.length;&nbsp;n++)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmp&nbsp;=&nbsp;(java.lang.Integer.toHexString(b[n]&nbsp;&amp;&nbsp;</span><span class="number">0XFF</span><span>)); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(stmp.length()&nbsp;==&nbsp;</span><span class="number">1</span><span>) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hs&nbsp;=&nbsp;hs&nbsp;+&nbsp;</span><span class="string">&quot;0&quot;</span><span>&nbsp;+&nbsp;stmp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hs&nbsp;=&nbsp;hs&nbsp;+&nbsp;stmp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;hs.toUpperCase(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;功能:字符串二行制 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;b </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;hex2byte(</span><span class="keyword">byte</span><span>[]&nbsp;b)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;((b.length&nbsp;%&nbsp;</span><span class="number">2</span><span>)&nbsp;!=&nbsp;</span><span class="number">0</span><span>) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">throw</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;IllegalArgumentException(</span><span class="string">&quot;长度不是偶数&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;b2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">byte</span><span>[b.length&nbsp;/&nbsp;</span><span class="number">2</span><span>]; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;n&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;n&nbsp;&lt;&nbsp;b.length;&nbsp;n&nbsp;+=&nbsp;</span><span class="number">2</span><span>)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;item&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;String(b,&nbsp;n,&nbsp;</span><span class="number">2</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b2[n&nbsp;/&nbsp;</span><span class="number">2</span><span>]&nbsp;=&nbsp;(</span><span class="keyword">byte</span><span>)&nbsp;Integer.parseInt(item,&nbsp;</span><span class="number">16</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;b2; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/* </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(non-Javadoc) </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;java.lang.Object#toString() </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="annotation">@Override</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;toString()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;b&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;encrypt(realKey.getBytes(),&nbsp;PASSWORD_CRYPT_KEY.getBytes()); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;encryptKey&nbsp;=&nbsp;byte2hex(b); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;encryptKey; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/* </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;1.生成注册码 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;data&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;StringTest(</span><span class="keyword">false</span><span>).toString(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;未注册注册码:&quot;</span><span>+data); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;未注册注册码长度:&quot;</span><span>+data.length()); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/* </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;2.写入属性文件 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Properties&nbsp;pro&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;File(</span><span class="string">&quot;d:\\key.properties&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(file.exists()){</span><span class="comment">//文件已存在 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;in&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileInputStream(</span><span class="string">&quot;d:\\key.properties&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Properties(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.load(in); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.setProperty(</span><span class="string">&quot;key.data&quot;</span><span>,&nbsp;data); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream&nbsp;out&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileOutputStream(</span><span class="string">&quot;d:\\key.properties&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.store(out,&nbsp;</span><span class="string">&quot;key&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>{</span><span class="comment">//文件不存在 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Properties(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.setProperty(</span><span class="string">&quot;key.data&quot;</span><span>,&nbsp;data); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream&nbsp;out&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileOutputStream(</span><span class="string">&quot;d:\\key.properties&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.store(out,&nbsp;</span><span class="string">&quot;key&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/* </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;3.解密注册码 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;decryptKey&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;String(decrypt(hex2byte(data.getBytes()),&nbsp;PASSWORD_CRYPT_KEY &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getBytes())); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;解密后注册码:&quot;</span><span>&nbsp;+&nbsp;decryptKey); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;d&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Date(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.setTime(Long.valueOf(decryptKey.substring( &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decryptKey.lastIndexOf(</span><span class="string">&quot;:&quot;</span><span>)&nbsp;+&nbsp;</span><span class="number">1</span><span>,&nbsp;decryptKey.length()))); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateFormat&nbsp;df&nbsp;=&nbsp;DateFormat.getDateInstance(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;解密后有效信息:&quot;</span><span>+df.format(d)); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p>这里采用了DES算法进行加密.</p>
          <br/>
          <span style="color:red;">
            <a href="http://szjiang.javaeye.com/blog/118733#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 31 Aug 2007 09:54:00 +0800</pubDate>
        <link>http://szjiang.javaeye.com/blog/118733</link>
        <guid>http://szjiang.javaeye.com/blog/118733</guid>
      </item>
      <item>
        <title>介绍下showModalDialog(模式对话框)的使用方法</title>
        <author>szjiang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://szjiang.javaeye.com">szjiang</a>&nbsp;
          链接：<a href="http://szjiang.javaeye.com/blog/115253" style="color:red;">http://szjiang.javaeye.com/blog/115253</a>&nbsp;
          发表时间: 2007年08月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">1. 使用方法：<br />
vReturnValue = window.showModalDialog(sURL [， vArguments] [，sFeatures])</font></p>
<p><font face="Arial">2. 参数说明：<br />
sURL--<br />
必选参数，类型：字符串。用来指定对话框要显示的文档的URL。<br />
vArguments--<br />
可选参数，类型：变体。用来向对话框传递参数。传递的参数类型不限，包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。<br />
sFeatures--<br />
可选参数，类型：字符串。用来描述对话框的外观等信息，可以使用以下的一个或几个，用分号&ldquo;;&rdquo;隔开。<br />
1.dialogHeight :对话框高度，不小于１００px，ＩＥ４中dialogHeight 和 dialogWidth 默认的单位是em，而ＩＥ５中是px，为方便其见，在定义modal方式的对话框时，用px做单位。<br />
2.dialogWidth: 对话框宽度。<br />
3.dialogLeft: 离屏幕左的距离。<br />
4.dialogTop: 离屏幕上的距离。<br />
5.center: {yes | no | 1 | 0 }：窗口是否居中，默认yes，但仍可以指定高度和宽度。<br />
6.help: {yes | no | 1 | 0 }：是否显示帮助按钮，默认yes。<br />
7.resizable: {yes | no | 1 | 0 } ［ＩＥ５＋］：是否可被改变大小。默认no。<br />
8.status: {yes | no | 1 | 0 } ［IE5+］：是否显示状态栏。默认为yes[ Modeless]或no[Modal]。<br />
9.scroll:{ yes | no | 1 | 0 | on | off }：指明对话框是否显示滚动条。默认为yes。<br />
下面几个属性是用在HTA中的，在一般的网页中一般不使用。<br />
10.dialogHide:{ yes | no | 1 | 0 | on | off }：在打印或者打印预览时对话框是否隐藏。默认为no。<br />
11.edge:{ sunken | raised }：指明对话框的边框样式。默认为raised。<br />
12.unadorned:{ yes | no | 1 | 0 | on | off }：默认为no。</font></p>
<p><font face="Arial">3. 参数传递：<br />
1.要想对话框传递参数，是通过vArguments来进行传递的。类型不限制，对于字符串类型，最大为4096个字符。也可以传递对象，例如：</font></p>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span>parent.htm &nbsp;&nbsp;</span></span> </li>
    <li class=""><span><script>   </span></li>
    <li class="alt"><span></span><span class="keyword">var</span><span> obj = </span><span class="keyword">new</span><span> Object();   </span></li>
    <li class=""><span>obj.name=</span><span class="string">"51js"</span><span>;   </span></li>
    <li class="alt"><span>window.showModalDialog(</span><span class="string">"modal.htm"</span><span>，obj，</span><span class="string">"dialogWidth=200px;dialogHeight=100px"</span><span>);   </span></li>
    <li class=""><span></script>&nbsp;&nbsp;</span> </li>
    <li class="alt">&nbsp; </li>
    <li class=""><span>modal.htm &nbsp;&nbsp;</span> <font face="Arial"></font></li>
    <li class="alt"><span><script>   </span></li>
    <li class=""><span></span><span class="keyword">var</span><span> obj = window.dialogArguments   </span></li>
    <li class="alt"><span>alert(</span><span class="string">"您传递的参数为："</span><span> + obj.name)   </span></li>
    <li class=""><span></script>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><font face="Arial">2.可以通过window.returnValue向打开对话框的窗口返回信息，当然也可以是对象。例如：</font></p>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span>parent.htm &nbsp;&nbsp;</span></span> </li>
    <li class=""><span><script>   </span></li>
    <li class="alt"><span>str =window.showModalDialog(</span><span class="string">"modal.htm"</span><span>，，</span><span class="string">"dialogWidth=200px;dialogHeight=100px"</span><span>);   </span></li>
    <li class=""><span>alert(str);   </span></li>
    <li class="alt"><span></script>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>modal.htm &nbsp;&nbsp;</span> </li>
    <li class=""><span><script>   </span></li>
    <li class="alt"><span>window.returnValue=</span><span class="string">"http://www.51js.com"</span><span>;   </span></li>
    <li class=""><span></script>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p>4.窗口的关闭:</p>
<div class="code_title"><font face="Arial">self.close();</font></div>
<span>
<p><font face="Arial"></font></p>
<p><font face="Arial">5.让在showModalDialog弹出新窗口里操作button而不弹出新窗口.需要在head中间<font face="Arial">加 </font></font></p>
<font face="Arial"><font face="Arial">
<base target="_self" />
<div class="code_title"><span>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span><span class="string">&quot;_self&quot;</span><span>&gt;&nbsp;&nbsp;</span></span> </span></li>
</ol>
</div>
</span></div>

</font></font>
<p>&nbsp;</p>
</span>
          <br/>
          <span style="color:red;">
            <a href="http://szjiang.javaeye.com/blog/115253#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 22 Aug 2007 14:25:00 +0800</pubDate>
        <link>http://szjiang.javaeye.com/blog/115253</link>
        <guid>http://szjiang.javaeye.com/blog/115253</guid>
      </item>
      <item>
        <title>对Hibernate多对多查询的浅谈</title>
        <author>szjiang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://szjiang.javaeye.com">szjiang</a>&nbsp;
          链接：<a href="http://szjiang.javaeye.com/blog/114068" style="color:red;">http://szjiang.javaeye.com/blog/114068</a>&nbsp;
          发表时间: 2007年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Hibernate众所周知是比较出名的ORM框架．但对于多对多的情况下，基本上有２中解决方案．</p>
<p>其一．多对多．</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span><span class="string">&quot;roles&quot;</span><span>&nbsp;table=</span><span class="string">&quot;COM_ROLE_USER&quot;</span><span>&gt; &nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span><key></key>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span><span class="string">&quot;USER_ID&quot;</span><span>&nbsp;precision=</span><span class="string">&quot;15&quot;</span><span>&nbsp;scale=</span><span class="string">&quot;0&quot;</span><span>&nbsp;not-</span><span class="keyword">null</span><span>=</span><span class="string">&quot;true&quot;</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span><span class="keyword">class</span><span>=</span><span class="string">&quot;mypact.model.ComRole&quot;</span><span>　column=</span><span class="string">&quot;ROLE_ID&quot;</span><span>/&gt; &nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>其二．拆分为２个一对多的关系．</p>
<p>对于第一种，存在着一个比较难处理的问题．例举一个例子来说．用户表与角色表之间多对多关联．其中用＂COM_USER_ROLE＂作为对照表,如需要删除用户表数据,那么应该级联删除&quot;COM_USER_ROLE&quot;的关系.如采用第一种方案,那么这个问题就比较难处理了,除非底层数据库支持级联删除功能.</p>
          <br/>
          <span style="color:red;">
            <a href="http://szjiang.javaeye.com/blog/114068#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 19 Aug 2007 13:52:00 +0800</pubDate>
        <link>http://szjiang.javaeye.com/blog/114068</link>
        <guid>http://szjiang.javaeye.com/blog/114068</guid>
      </item>
  </channel>
</rss>