天天看點

MyEclipse for Spring 8.5序列号算法

<code>import</code> <code>java.text.DecimalFormat;</code>

<code>import</code> <code>java.text.NumberFormat;</code>

<code>import</code> <code>java.text.SimpleDateFormat;</code>

<code>import</code> <code>java.util.Calendar;</code>

<code>public</code> <code>class</code> <code>CalSn {</code>

<code>    </code><code>private</code> <code>static</code> <code>final</code> <code>String LL = </code><code>"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."</code><code>;</code>

<code>    </code><code>public</code> <code>String getSerial(String userId, String type) {</code>

<code>        </code><code>NumberFormat nf = </code><code>new</code> <code>DecimalFormat(</code><code>"000"</code><code>);</code>

<code>        </code><code>Calendar cal = Calendar.getInstance();</code>

<code>        </code><code>cal.add(Calendar.YEAR, </code><code>3</code><code>);</code>

<code>        </code><code>cal.add(Calendar.DAY_OF_YEAR, -</code><code>1</code><code>);</code>

<code>        </code><code>String licenseNum = nf.format((</code><code>int</code><code>) (Math.random() * </code><code>1000</code><code>));</code>

<code>        </code><code>String expTime = </code><code>new</code> <code>StringBuilder(</code><code>"-"</code><code>)</code>

<code>                </code><code>.append(</code><code>new</code> <code>SimpleDateFormat(</code><code>"yyMMdd"</code><code>).format(cal.getTime()))</code>

<code>                </code><code>.append(</code><code>"0"</code><code>).toString();</code>

<code>        </code><code>String need = </code><code>new</code> <code>StringBuilder(userId.substring(</code><code>0</code><code>, </code><code>1</code><code>)).append(</code><code>"Y"</code><code>)</code>

<code>                </code><code>.append(type).append(</code><code>"-100"</code><code>).append(licenseNum).append(expTime)</code>

<code>                </code><code>.toString();</code>

<code>        </code><code>String dx = </code><code>new</code> <code>StringBuilder(need).append(LL).append(userId)</code>

<code>        </code><code>int</code> <code>suf = </code><code>this</code><code>.decode(dx);</code>

<code>        </code><code>String code = </code><code>new</code> <code>StringBuilder(need).append(String.valueOf(suf))</code>

<code>        </code><code>return</code> <code>this</code><code>.change(code);</code>

<code>    </code><code>}</code>

<code>    </code><code>private</code> <code>int</code> <code>decode(String s) {</code>

<code>        </code><code>int</code> <code>i;</code>

<code>        </code><code>char</code><code>[] ac;</code>

<code>        </code><code>int</code> <code>j;</code>

<code>        </code><code>int</code> <code>k;</code>

<code>        </code><code>i = </code><code>0</code><code>;</code>

<code>        </code><code>ac = s.toCharArray();</code>

<code>        </code><code>j = </code><code>0</code><code>;</code>

<code>        </code><code>k = ac.length;</code>

<code>        </code><code>while</code> <code>(j &lt; k) {</code>

<code>            </code><code>i = (</code><code>31</code> <code>* i) + ac[j];</code>

<code>            </code><code>j++;</code>

<code>        </code><code>}</code>

<code>        </code><code>return</code> <code>Math.abs(i);</code>

<code>    </code><code>private</code> <code>String change(String s) {</code>

<code>        </code><code>byte</code><code>[] abyte0;</code>

<code>        </code><code>abyte0 = s.getBytes();</code>

<code>        </code><code>ac = </code><code>new</code> <code>char</code><code>[s.length()];</code>

<code>        </code><code>k = abyte0.length;</code>

<code>        </code><code>while</code> <code>(i &lt; k) {</code>

<code>            </code><code>j = abyte0[i];</code>

<code>            </code><code>if</code> <code>((j &gt;= </code><code>48</code><code>) &amp;&amp; (j &lt;= </code><code>57</code><code>)) {</code>

<code>                </code><code>j = (((j - </code><code>48</code><code>) + </code><code>5</code><code>) % </code><code>10</code><code>) + </code><code>48</code><code>;</code>

<code>            </code><code>} </code><code>else</code> <code>if</code> <code>((j &gt;= </code><code>65</code><code>) &amp;&amp; (j &lt;= </code><code>90</code><code>)) {</code>

<code>                </code><code>j = (((j - </code><code>65</code><code>) + </code><code>13</code><code>) % </code><code>26</code><code>) + </code><code>65</code><code>;</code>

<code>            </code><code>} </code><code>else</code> <code>if</code> <code>((j &gt;= </code><code>97</code><code>) &amp;&amp; (j &lt;= </code><code>122</code><code>)) {</code>

<code>                </code><code>j = (((j - </code><code>97</code><code>) + </code><code>13</code><code>) % </code><code>26</code><code>) + </code><code>97</code><code>;</code>

<code>            </code><code>}</code>

<code>            </code><code>ac[i] = (</code><code>char</code><code>) j;</code>

<code>            </code><code>i++;</code>

<code>        </code><code>return</code> <code>String.valueOf(ac);</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>

<code>        </code><code>String userId = </code><code>"qiang"</code><code>;</code>

<code>        </code><code>CalSn myeclipsegen = </code><code>new</code> <code>CalSn();</code>

<code>        </code><code>String res = myeclipsegen.getSerial(userId, </code><code>"E3MS"</code><code>);</code>

<code>        </code><code>System.out.println(</code><code>"Serial:"</code> <code>+ res);</code>

<code>}</code>

運作結果:

運作:D:\Java\jdk1.8.0\bin\java.exe CalSn

Serial:dLR8ZF-655880-6151685350542957

輸出結束,傳回值是[0].

是以序列号為:

qiang

dLR8ZF-655880-6151685350542957

本文轉自 夢朝思夕 51CTO部落格,原文連結:http://blog.51cto.com/qiangmzsx/1221748