﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-行至水穷处 坐看云起时     念时.net</title><link>http://www.cnblogs.com/nianshi/</link><description>-----我的2008 加油！！！------</description><language>zh-cn</language><lastBuildDate>Wed, 09 Jul 2008 08:56:36 GMT</lastBuildDate><pubDate>Wed, 09 Jul 2008 08:56:36 GMT</pubDate><ttl>60</ttl><item><title>获取URL的参数值</title><link>http://www.cnblogs.com/nianshi/archive/2008/06/27/1231233.html</link><dc:creator>念时</dc:creator><author>念时</author><pubDate>Fri, 27 Jun 2008 08:49:00 GMT</pubDate><guid>http://www.cnblogs.com/nianshi/archive/2008/06/27/1231233.html</guid><wfw:comment>http://www.cnblogs.com/nianshi/comments/1231233.html</wfw:comment><comments>http://www.cnblogs.com/nianshi/archive/2008/06/27/1231233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/nianshi/comments/commentRss/1231233.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/nianshi/services/trackbacks/1231233.html</trackback:ping><description><![CDATA[&lt;body&gt; <br />
&lt;a&nbsp;href=<span style="color: #ff00ff">"javascript:location.href=location.href&nbsp;+&nbsp;'?a=1&amp;b=2'"</span>&gt;search&lt;/a&gt; <br />
&lt;script&nbsp;language=<span style="color: #ff00ff">"JavaScript"</span>&gt; <br />
&lt;!-- <br />
<span style="color: #0000ff">var</span>&nbsp;a&nbsp;=&nbsp;location.search.substr(1); <br />
<span style="color: #0000ff">if</span>(a.length&gt;0) <br />
{ <br />
&nbsp;<span style="color: #0000ff">var</span>&nbsp;re&nbsp;=&nbsp;/([^&amp;]*?)\=([^&amp;]*)/g <br />
&nbsp;<span style="color: #0000ff">var</span>&nbsp;s&nbsp;=&nbsp;a.match(re); <br />
&nbsp;for(<span style="color: #0000ff">var</span>&nbsp;i=&nbsp;0;i&lt;s.length;i++) <br />
&nbsp;{ <br />
&nbsp;&nbsp;alert(s[i]); <br />
&nbsp;&nbsp;alert(s[i].split(<span style="color: #ff00ff">"="</span>)[1]); <br />
&nbsp;} <br />
} <br />
<span style="color: #008000">//--&gt; </span><br />
&lt;/script&gt; <br />
&lt;/body&gt; 
<img src ="http://www.cnblogs.com/nianshi/aggbug/1231233.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37598/" target="_blank">[新闻]万名Linux使用者向暴雪请愿Linux版《Diablo III》</a>]]></description></item><item><title>关于asp.net导出Excel </title><link>http://www.cnblogs.com/nianshi/archive/2008/06/27/1230891.html</link><dc:creator>念时</dc:creator><author>念时</author><pubDate>Fri, 27 Jun 2008 01:21:00 GMT</pubDate><guid>http://www.cnblogs.com/nianshi/archive/2008/06/27/1230891.html</guid><wfw:comment>http://www.cnblogs.com/nianshi/comments/1230891.html</wfw:comment><comments>http://www.cnblogs.com/nianshi/archive/2008/06/27/1230891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/nianshi/comments/commentRss/1230891.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/nianshi/services/trackbacks/1230891.html</trackback:ping><description><![CDATA[<div class="postTitle"><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/fosk/articles/267287.html">关于asp.net导出Excel</a> </div>
<div class="postText">近日在csdn论坛上找到了这段代码，可以像asp一样把页面导出到excel，这样就可以导出一些比较复杂的excel页面，而不用模板之类的复杂方式了！<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;OutPutExcel()<br />
<img id="Codehighlighter1_28_997_Open_Image" onclick="this.style.display='none'; Codehighlighter1_28_997_Open_Text.style.display='none'; Codehighlighter1_28_997_Closed_Image.style.display='inline'; Codehighlighter1_28_997_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_28_997_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_28_997_Closed_Text.style.display='none'; Codehighlighter1_28_997_Open_Image.style.display='inline'; Codehighlighter1_28_997_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_28_997_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_28_997_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">定义文档类型、字符编码</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Clear();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Buffer</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Charset</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">GB2312</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">下面这行很重要，&nbsp;attachment&nbsp;参数表示作为附件下载，您可以改成&nbsp;online在线打开<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">filename=FileFlow.xls&nbsp;指定输出文件的名称，注意其扩展名和指定文件类型相符，可以为：.doc&nbsp;　　&nbsp;.xls&nbsp;　　&nbsp;.txt&nbsp;　　.htm</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.AppendHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Disposition</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">attachment;filename=FileFlow.xls</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.ContentEncoding</span><span style="color: #000000">=</span><span style="color: #000000">System.Text.Encoding.GetEncoding(</span><span style="color: #000000">"</span><span style="color: #000000">GB2312</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Response.ContentType指定文件类型&nbsp;可以为application/ms-excel、application/ms-word、application/ms-txt、application/ms-html&nbsp;或其他浏览器可直接支持文档</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.ContentType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">application/ms-excel</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.EnableViewState&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">　定义一个输入流</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.IO.StringWriter&nbsp;oStringWriter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;System.IO.StringWriter();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Web.UI.HtmlTextWriter&nbsp;oHtmlTextWriter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;System.Web.UI.HtmlTextWriter(oStringWriter);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.RenderControl(oHtmlTextWriter);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">this&nbsp;表示输出本页，你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(oStringWriter.ToString());<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.End();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
</div>
<br />
在page_load里边调用就可以把asp.net页面输出到excel。</div>
<img src ="http://www.cnblogs.com/nianshi/aggbug/1230891.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37598/" target="_blank">[新闻]万名Linux使用者向暴雪请愿Linux版《Diablo III》</a>]]></description></item><item><title>2008年6月25日收集SQL命令：</title><link>http://www.cnblogs.com/nianshi/archive/2008/06/25/1229457.html</link><dc:creator>念时</dc:creator><author>念时</author><pubDate>Wed, 25 Jun 2008 03:20:00 GMT</pubDate><guid>http://www.cnblogs.com/nianshi/archive/2008/06/25/1229457.html</guid><wfw:comment>http://www.cnblogs.com/nianshi/comments/1229457.html</wfw:comment><comments>http://www.cnblogs.com/nianshi/archive/2008/06/25/1229457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/nianshi/comments/commentRss/1229457.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/nianshi/services/trackbacks/1229457.html</trackback:ping><description><![CDATA[2008年6月25日 11:12:28<br />
1.检查要创建的表是否存在？<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">IF</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">OBJECT_ID</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Price_history</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">U</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">NOT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">DROP</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;Price_history<br />
2.复到一个表的表结构以开成一个新表。<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">AS</span><span style="color: #000000">&nbsp;ProductID,UnitPrice&nbsp;</span><span style="color: #0000ff">AS</span><span style="color: #000000">&nbsp;OldPrice,UnitPrice&nbsp;</span><span style="color: #0000ff">AS</span><span style="color: #000000">&nbsp;NewPrice,</span><span style="color: #ff00ff">GETDATE</span><span style="color: #000000">()&nbsp;</span><span style="color: #0000ff">AS</span><span style="color: #000000">&nbsp;Date<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;Price_history<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;dbo.Products<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">0<br />
3.判断某触发器是否存在？<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">IF</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">OBJECT_ID</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">trg_Products_u</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">TR</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">NOT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">DROP</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TRIGGER</span><span style="color: #000000">&nbsp;trg_Products_u;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">GO<br />
4.创建一个<font color="#800000">触发器<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TRIGGER</span><span style="color: #000000">&nbsp;trg_Products_u&nbsp;</span><span style="color: #0000ff">ON</span><span style="color: #000000">&nbsp;dbo.Products&nbsp;</span><span style="color: #0000ff">FOR</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">UPDATE</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">AS</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008080">--</span><span style="color: #008080">如果更新的不是UnitPrice或没有更新直接返回</span><span style="color: #008080"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">IF</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">NOT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">UPDATE</span><span style="color: #000000">(UnitPrice)&nbsp;</span><span style="color: #808080">OR</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #008000">@@ROWCOUNT</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">RETURN</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">ELSE</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">INSERT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;price_history//实现了在更新价格时在日志表里记录下原始价格和新价格<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;i.ProductID,d.UnitPrice,i.UnitPrice,</span><span style="color: #ff00ff">getdate</span><span style="color: #000000">()<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;inserted&nbsp;i<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">join</span><span style="color: #000000">&nbsp;deleted&nbsp;d //用Inserted和Deleted这两个表实现：）<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;i.ProductID</span><span style="color: #808080">=</span><span style="color: #000000">d.ProductID<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">GO<br />
<br />
5.一个带多表查询的UPdate语句<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">update</span><span style="color: #000000">&nbsp;p<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;UnitPrice</span><span style="color: #808080">=</span><span style="color: #000000">UnitPrice</span><span style="color: #808080">*</span><span style="font-weight: bold; color: #800000">1.5</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dbo.Products&nbsp;p<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">join</span><span style="color: #000000">&nbsp;dbo.Suppliers&nbsp;s<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;p.SupplierID</span><span style="color: #808080">=</span><span style="color: #000000">s.SupplierID<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;s.city</span><span style="color: #808080">=</span><span style="color: #000000">N</span><span style="color: #ff0000">'</span><span style="color: #ff0000">London</span><span style="color: #ff0000">'</span><br />
<br />
6.检查、创建、执行存储过程<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">IF</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">OBJECT_ID</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">prc_UpdateProductPrice</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">P</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">NOT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">DROP</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">PROC</span><span style="color: #000000">&nbsp;prc_UpdateProductPrice;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">GO</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">PROCEDURE</span><span style="color: #000000">&nbsp;prc_UpdateProductPrice<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">WITH</span><span style="color: #000000">&nbsp;RECOMPILE<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">AS</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;NOCOUNT&nbsp;</span><span style="color: #0000ff">ON</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">update</span><span style="color: #000000">&nbsp;p<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;UnitPrice</span><span style="color: #808080">=</span><span style="color: #000000">UnitPrice</span><span style="color: #808080">*</span><span style="font-weight: bold; color: #800000">1.5</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dbo.Products&nbsp;p<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">join</span><span style="color: #000000">&nbsp;dbo.Suppliers&nbsp;s<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;p.SupplierID</span><span style="color: #808080">=</span><span style="color: #000000">s.SupplierID<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;s.city</span><span style="color: #808080">=</span><span style="color: #000000">N</span><span style="color: #ff0000">'</span><span style="color: #ff0000">London</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">END</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">GO</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">EXEC</span><span style="color: #000000">&nbsp;prc_UpdateProductPrice<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">GO</span><br />
</span></font></span></span></span>
<img src ="http://www.cnblogs.com/nianshi/aggbug/1229457.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37597/" target="_blank">[新闻]56.com我乐网将全面转行 退出视频行业</a>]]></description></item><item><title>屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键 </title><link>http://www.cnblogs.com/nianshi/archive/2008/06/25/1229447.html</link><dc:creator>念时</dc:creator><author>念时</author><pubDate>Wed, 25 Jun 2008 03:02:00 GMT</pubDate><guid>http://www.cnblogs.com/nianshi/archive/2008/06/25/1229447.html</guid><wfw:comment>http://www.cnblogs.com/nianshi/comments/1229447.html</wfw:comment><comments>http://www.cnblogs.com/nianshi/archive/2008/06/25/1229447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/nianshi/comments/commentRss/1229447.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/nianshi/services/trackbacks/1229447.html</trackback:ping><description><![CDATA[<font face="Verdana">&lt;script language="Javascript"&gt;&lt;!-- <br />
&nbsp; //屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键 <br />
&nbsp; //Author: meizz(梅花雨) 2002-6-18 <br />
function document.oncontextmenu(){event.returnValue=false;}//屏蔽鼠标右键 <br />
function window.onhelp(){return false} //屏蔽F1帮助 <br />
function document.onkeydown() <br />
{ <br />
&nbsp; if ((window.event.altKey)&amp;&amp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((window.event.keyCode==37)||&nbsp;&nbsp; //屏蔽 Alt+ 方向键 &#8592; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (window.event.keyCode==39)))&nbsp;&nbsp; //屏蔽 Alt+ 方向键 &#8594; <br />
&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp; alert("不准你使用ALT+方向键前进或后退网页！"); <br />
&nbsp;&nbsp;&nbsp;&nbsp; event.returnValue=false; <br />
&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp; /* 注：这还不是真正地屏蔽 Alt+ 方向键， <br />
&nbsp;&nbsp;&nbsp;&nbsp; 因为 Alt+ 方向键弹出警告框时，按住 Alt 键不放， <br />
&nbsp;&nbsp;&nbsp;&nbsp; 用鼠标点掉警告框，这种屏蔽方法就失效了。以后若 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 有哪位高手有真正屏蔽 Alt 键的方法，请告知。*/ <br />
&nbsp; if ((event.keyCode==8)&nbsp; ||&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //屏蔽退格删除键 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (event.keyCode==116)||&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //屏蔽 F5 刷新键 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (event.ctrlKey &amp;&amp; event.keyCode==82)){ //Ctrl + R <br />
&nbsp;&nbsp;&nbsp;&nbsp; event.keyCode=0; <br />
&nbsp;&nbsp;&nbsp;&nbsp; event.returnValue=false; <br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp; if (event.keyCode==122){event.keyCode=0;event.returnValue=false;}&nbsp; //屏蔽F11 <br />
&nbsp; if (event.ctrlKey &amp;&amp; event.keyCode==78) event.returnValue=false;&nbsp;&nbsp; //屏蔽 Ctrl+n <br />
&nbsp; if (event.shiftKey &amp;&amp; event.keyCode==121)event.returnValue=false;&nbsp; //屏蔽 shift+F10 <br />
&nbsp; if (window.event.srcElement.tagName == "A" &amp;&amp; window.event.shiftKey)&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.event.returnValue = false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //屏蔽 shift 加鼠标左键新开一网页 <br />
&nbsp; if ((window.event.altKey)&amp;&amp;(window.event.keyCode==115))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //屏蔽Alt+F4 <br />
&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false; <br />
&nbsp; } <br />
} <br />
&lt;/script&gt; </font>
<img src ="http://www.cnblogs.com/nianshi/aggbug/1229447.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37597/" target="_blank">[新闻]56.com我乐网将全面转行 退出视频行业</a>]]></description></item><item><title>JS处理当前日期 </title><link>http://www.cnblogs.com/nianshi/archive/2008/06/17/1224097.html</link><dc:creator>念时</dc:creator><author>念时</author><pubDate>Tue, 17 Jun 2008 08:15:00 GMT</pubDate><guid>http://www.cnblogs.com/nianshi/archive/2008/06/17/1224097.html</guid><wfw:comment>http://www.cnblogs.com/nianshi/comments/1224097.html</wfw:comment><comments>http://www.cnblogs.com/nianshi/archive/2008/06/17/1224097.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/nianshi/comments/commentRss/1224097.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/nianshi/services/trackbacks/1224097.html</trackback:ping><description><![CDATA[<h1 class="content_title">JS处理当前日期</h1>
<ul class="content_title2">来源：飞云网&nbsp;&nbsp; </ul>
    <p>&lt;SCRIPT LANGUAGE="javascript"&gt;<br />
    var myDate = new Date();<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.getYear();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取当前年份(2位)<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.getFullYear();&nbsp;&nbsp;&nbsp; //获取完整的年份(4位,1970-????)<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.getMonth();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取当前月份(0-11,0代表1月)<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.getDate();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取当前日(1-31)<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.getDay();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取当前星期X(0-6,0代表星期天)<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.getTime();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取当前时间(从1970.1.1开始的毫秒数)<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.getHours();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取当前小时数(0-23)<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.getMinutes();&nbsp;&nbsp;&nbsp;&nbsp; //获取当前分钟数(0-59)<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.getSeconds();&nbsp;&nbsp;&nbsp;&nbsp; //获取当前秒数(0-59)<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.getMilliseconds();&nbsp;&nbsp;&nbsp; //获取当前毫秒数(0-999)<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.toLocaleDateString();&nbsp;&nbsp;&nbsp;&nbsp; //获取当前日期<br />
    &nbsp;&nbsp;&nbsp;&nbsp; var mytime=myDate.toLocaleTimeString();&nbsp;&nbsp;&nbsp;&nbsp; //获取当前时间<br />
    &nbsp;&nbsp;&nbsp;&nbsp; myDate.toLocaleString( );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取日期与时间<br />
    if (mytime&lt;"23:30:00")<br />
    {<br />
    alert(mytime);<br />
    }<br />
    &lt;/SCRIPT&gt;</p>
<img src ="http://www.cnblogs.com/nianshi/aggbug/1224097.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37596/" target="_blank">[新闻]Joost借道TOM在线 将正式进军中国</a>]]></description></item><item><title>哈希加密:MD5()</title><link>http://www.cnblogs.com/nianshi/archive/2008/06/10/1216503.html</link><dc:creator>念时</dc:creator><author>念时</author><pubDate>Tue, 10 Jun 2008 01:42:00 GMT</pubDate><guid>http://www.cnblogs.com/nianshi/archive/2008/06/10/1216503.html</guid><wfw:comment>http://www.cnblogs.com/nianshi/comments/1216503.html</wfw:comment><comments>http://www.cnblogs.com/nianshi/archive/2008/06/10/1216503.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/nianshi/comments/commentRss/1216503.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/nianshi/services/trackbacks/1216503.html</trackback:ping><description><![CDATA[<strong>哈希加密</strong><br />
<br />
如果数据库保存了敏感的数据，如银行卡密码，客户信息等，你可能想将这些数据以加密的形式保存在数据库中。这样即使有人进入了你的数据库，并看到了这些数据，也很难获得其中的真实信息。<br />
<br />
在应用程序的大量信息中，也许你只想交很小的一部分进行加密，如用户的密码等。这些密码不应该以明文的形式保存，它们应该以加密的形式保存在数据库中。一般情况下，大多数系统，这其中包括MySQL本身都是使用哈希算法对敏感数据进行加密的。<br />
<br />
哈希加密是单向加密，也就是说，被加密的字符串是无法得到原字符串的。这种方法使用很有限，一般只使用在密码验证或其它需要验证的地方。在比较时并不是将加密字符串进行解密，而是将输入的字符串也使用同样的方法进行加密，再和数据库中的加密字符串进行比较。这样即使知道了算法并得到了加密字符串，也无法还原最初的字符串。银行卡密码就是采用的这种方式进行加密。<br />
<br />
MySQL提供了4个函数用于哈希加密：PASSWORD, ENCRYPT, SHA1和MD5。下面让我们试一试这4个函数，看看会得到什么结果。我们以加密字符串"pa55word"为例进行说明：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;MD5(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">pa55word</span><span style="color: #ff0000">'</span><span style="color: #000000">);</span></div>
<br />
+----------------------------------+<br />
<br />
| MD5('pa55word') |<br />
<br />
+----------------------------------+<br />
<br />
| a17a41337551d6542fd005e18b43afd4 |<br />
<br />
+----------------------------------+<br />
<br />
1 row in set (0.13 sec)<br />
<br />
下面是PASSWORD函数<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;PASSWORD(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">pa55word</span><span style="color: #ff0000">'</span><span style="color: #000000">);</span></div>
<br />
+----------------------+<br />
<br />
| PASSWORD('pa55word') |<br />
<br />
+----------------------+<br />
<br />
| 1d35c6556b8cab45 |<br />
<br />
+----------------------+<br />
<br />
1 row in set (0.00 sec)<br />
<br />
下面是ENCRYPT函数<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;ENCRYPT(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">pa55word</span><span style="color: #ff0000">'</span><span style="color: #000000">);</span></div>
<br />
+---------------------+<br />
<br />
| ENCRYPT('pa55word') |<br />
<br />
+---------------------+<br />
<br />
| up2Ecb0Hdj25A |<br />
<br />
+---------------------+<br />
<br />
1 row in set (0.17 sec)<br />
<br />
上面的每个函数都返回了一个加密后的字符串。为了区分加密字符串的大小写，最好在使用ENCRYPT生成加密字符串时，将这个字段定义成CHAR BINARY类型。<br />
<br />
上面列举了3种加密的方法，但我认为使用MD5加密是最好的。这是因为这样做可以将明文密码显示在处理列表中或是查询日志中，这样便于跟踪。如下面的INSERT语句使用插入了一条记录，其中的密码使用了MD5进行加密：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">INSERT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;table1&nbsp;(</span><span style="color: #ff00ff">user</span><span style="color: #000000">,&nbsp;pw)&nbsp;VALUE&nbsp;(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">user1</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;MD5(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">password1</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;)</span></div>
<br />
可以通过如下的语句进行密码验证：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;table1&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">user1</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;pw&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;MD5(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">password1</span><span style="color: #ff0000">'</span><span style="color: #000000">)</span></div>
<br />
&nbsp;&nbsp;&nbsp; 哈希加密方法可以很好地对密码进行加密，使用了这种方法加密，密码将无法 恢复成明文。 
<img src ="http://www.cnblogs.com/nianshi/aggbug/1216503.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37595/" target="_blank">[新闻]微软副总裁公开承认Vista存在问题</a>]]></description></item><item><title>JavaScript表单验证程序（http地址 时间日期 e-mail 数字 字符长度检查等）</title><link>http://www.cnblogs.com/nianshi/archive/2008/06/05/1214206.html</link><dc:creator>念时</dc:creator><author>念时</author><pubDate>Thu, 05 Jun 2008 03:20:00 GMT</pubDate><guid>http://www.cnblogs.com/nianshi/archive/2008/06/05/1214206.html</guid><wfw:comment>http://www.cnblogs.com/nianshi/comments/1214206.html</wfw:comment><comments>http://www.cnblogs.com/nianshi/archive/2008/06/05/1214206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/nianshi/comments/commentRss/1214206.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/nianshi/services/trackbacks/1214206.html</trackback:ping><description><![CDATA[<p><font face="Verdana">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;<br />
&lt;title&gt;vForm表单验证程序&lt;/title&gt;<br />
&lt;style type="text/css"&gt;<br />
&lt;!--<br />
div.info {<br />
&nbsp;width: 170px;<br />
&nbsp;overflow:visible;<br />
&nbsp;height:auto;<br />
&nbsp;font-size: small;<br />
&nbsp;position: absolute;<br />
&nbsp;background-color: #FFffdd;<br />
&nbsp;border: 1px solid #000;<br />
&nbsp;filter:progid:DXImageTransform.Microsoft.Shadow(color=#111111,direction=135,strength=3);<br />
&nbsp;top: 375px;<br />
&nbsp;padding: 5px;<br />
&nbsp;left: 671px;<br />
}<br />
div.info_title</font></p>
<p><font face="Verdana">.err{<br />
&nbsp;padding: 5px;<br />
&nbsp;height: 50px;<br />
&nbsp;width: 24em;<br />
&nbsp;position: absolute;<br />
&nbsp;background-color: #FFFFCC;<br />
&nbsp;left: 196px;<br />
&nbsp;top: 114px;<br />
&nbsp;font-size: small;<br />
&nbsp;opacity:0.5;<br />
&nbsp;border: 1px double #333333;<br />
&nbsp;filter: Shadow(Color=#000000, Direction=135);<br />
&nbsp;filter:progid:DXImageTransform.Microsoft.Shadow(color=#111111,direction=135,strength=5);</font></p>
<p><font face="Verdana">}<br />
#form1 .text_input {<br />
&nbsp;border-top: 1px solid #333333;<br />
&nbsp;border-right: 1px solid #999999;<br />
&nbsp;border-bottom: 1px solid #ddd;<br />
&nbsp;border-left: 1px solid #000000;<br />
}<br />
.info_title {<br />
&nbsp;color: #FF0000;<br />
&nbsp;background: #ACB9D1;<br />
}<br />
#form1 {<br />
&nbsp;position: static;<br />
&nbsp;left: 581px;<br />
&nbsp;top: 463px;<br />
&nbsp;border: 1px solid #3300FF;<br />
&nbsp;padding: 5px;<br />
&nbsp;;<br />
}<br />
#imok {<br />
&nbsp;display: block;<br />
&nbsp;position: absolute;<br />
&nbsp;height:315px;<br />
&nbsp;overflow:scroll;<br />
&nbsp;left: 100px;<br />
&nbsp;top: 100px;<br />
&nbsp;width: 306px;<br />
}<br />
.title h1 {<br />
&nbsp;background: #33CCFF;<br />
&nbsp;border-bottom: medium solid #3366FF;<br />
}<br />
.title p {<br />
&nbsp;font-size: medium;<br />
&nbsp;text-indent: 2em;<br />
}<br />
body {<br />
&nbsp;font-family: Verdana, Arial, Helvetica, sans-serif;<br />
&nbsp;font-size: medium;<br />
}</font></p>
<p><font face="Verdana">code {<br />
&nbsp;font: 12px/18px "lucida Grande", verdana, lucida, Arial, helvetica, "宋体", sans-serif;<br />
&nbsp;border:1px solid #0099cc;<br />
&nbsp;padding:5px;<br />
&nbsp;margin: 5px;<br />
&nbsp;width: 80%;<br />
&nbsp;color: #000;<br />
&nbsp;background-color: #ddedfb;<br />
&nbsp;display: block;<br />
}</font></p>
<p><font face="Verdana">--&gt;<br />
&lt;/style&gt;<br />
&lt;script language="JavaScript" type="text/javascript"&gt;<br />
//程序基本思路：通过扩展对象来实现，将String扩展 将默认的表单元素扩展 定义两个自定义对象。<br />
//String.isEmail<br />
//String.isUrl<br />
//表单元素.required<br />
//表单元素.isvalid<br />
//表单元素.validate<br />
//</font></p>
<p><font face="Verdana">//字符串验证扩展<br />
//├电子邮件验证<br />
String.prototype.isEmail = function(){<br />
&nbsp;var tmpStr = this;<br />
&nbsp;var email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;<br />
&nbsp;return email.test(tmpStr)<br />
}<br />
//├http地址验证<br />
String.prototype.isUrl = function(){<br />
&nbsp;var url = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&amp;_~`@[\]\':+!]*([^&lt;&gt;\"\"])*$/;<br />
&nbsp;var tmpStr = this;<br />
&nbsp;return url.test(tmpStr);<br />
}<br />
//├日期验证（第一部分）<br />
String.prototype.isDateTime = function(){<br />
&nbsp;if(Date.parse(this)||Date.parseDate(this))<br />
&nbsp;{<br />
&nbsp;&nbsp;return true;<br />
&nbsp;}<br />
&nbsp;else<br />
&nbsp;{<br />
&nbsp;&nbsp;return false;<br />
&nbsp;}<br />
}<br />
String.prototype.isInteger = function()<br />
{<br />
&nbsp;var _i = /^[-\+]?\d+$/;<br />
&nbsp;var _s = this; <br />
&nbsp;return _i.test(_s);<br />
}<br />
Date.prototype.toIsoDate = function()<br />
{<br />
&nbsp;var _d = this;<br />
&nbsp;var _s;<br />
&nbsp;_Y =_d.getFullYear();<br />
&nbsp;_M = _d.getMonth() + 1;<br />
&nbsp;_D = _d.getDate();<br />
&nbsp;_H = _d.getHours();<br />
&nbsp;_I = _d.getMinutes();<br />
&nbsp;_S = _d.getSeconds();<br />
&nbsp;with(_d)<br />
&nbsp;{<br />
&nbsp;&nbsp;_s = [getMonth() + 1,getDate(),getHours(),getMinutes(),getSeconds()];<br />
&nbsp;}<br />
&nbsp;for(var i = 0; i &lt; _s.length; i++)<br />
&nbsp;{<br />
&nbsp;&nbsp;if (_s[i].toString().length == 1)_s[i]= '0'+_s[i];<br />
&nbsp;}<br />
&nbsp;&nbsp;return (_Y + '-'+_s[0]+'-'+_s[1]+' '+_s[2]+':'+_s[3]+':'+_s[4])<br />
}<br />
//├日期验证（第二部分）<br />
Date.parseDate = function(str, fmt) {<br />
&nbsp;fmt = fmt||"%Y-%m-%d %H:%M";<br />
&nbsp;var today = new Date();<br />
&nbsp;var y = 0;<br />
&nbsp;var m = -1;<br />
&nbsp;var d = 0;<br />
&nbsp;var a = str.split(/\W+/);<br />
&nbsp;var b = fmt.match(/%./g);<br />
&nbsp;var i = 0, j = 0;<br />
&nbsp;var hr = 0;<br />
&nbsp;var min = 0;<br />
&nbsp;for (i = 0; i &lt; a.length; ++i) {<br />
&nbsp;&nbsp;if (!a[i])<br />
&nbsp;&nbsp;&nbsp;continue;<br />
&nbsp;&nbsp;switch (b[i]) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%d":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%e":<br />
&nbsp;&nbsp;&nbsp;d = parseInt(a[i], 10);<br />
&nbsp;&nbsp;&nbsp;break;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%m":<br />
&nbsp;&nbsp;&nbsp;m = parseInt(a[i], 10) - 1;<br />
&nbsp;&nbsp;&nbsp;break;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%Y":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%y":<br />
&nbsp;&nbsp;&nbsp;y = parseInt(a[i], 10);<br />
&nbsp;&nbsp;&nbsp;(y &lt; 100) &amp;&amp; (y += (y &gt; 29) ? 1900 : 2000);<br />
&nbsp;&nbsp;&nbsp;break;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%b":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%B":<br />
&nbsp;&nbsp;&nbsp;for (j = 0; j &lt; 12; ++j) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; }<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;break;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%H":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%I":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%k":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%l":<br />
&nbsp;&nbsp;&nbsp;hr = parseInt(a[i], 10);<br />
&nbsp;&nbsp;&nbsp;break;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%P":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%p":<br />
&nbsp;&nbsp;&nbsp;if (/pm/i.test(a[i]) &amp;&amp; hr &lt; 12)<br />
&nbsp;&nbsp;&nbsp;&nbsp;hr += 12;<br />
&nbsp;&nbsp;&nbsp;else if (/am/i.test(a[i]) &amp;&amp; hr &gt;= 12)<br />
&nbsp;&nbsp;&nbsp;&nbsp;hr -= 12;<br />
&nbsp;&nbsp;&nbsp;break;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "%M":<br />
&nbsp;&nbsp;&nbsp;min = parseInt(a[i], 10);<br />
&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;if (isNaN(y)) y = today.getFullYear();<br />
&nbsp;if (isNaN(m)) m = today.getMonth();<br />
&nbsp;if (isNaN(d)) d = today.getDate();<br />
&nbsp;if (isNaN(hr)) hr = today.getHours();<br />
&nbsp;if (isNaN(min)) min = today.getMinutes();<br />
&nbsp;if (y != 0 &amp;&amp; m != -1 &amp;&amp; d != 0)<br />
&nbsp;&nbsp;return new Date(y, m, d, hr, min, 0);<br />
&nbsp;y = 0; m = -1; d = 0;<br />
&nbsp;for (i = 0; i &lt; a.length; ++i) {<br />
&nbsp;&nbsp;if (a[i].search(/[a-zA-Z]+/) != -1) {<br />
&nbsp;&nbsp;&nbsp;var t = -1;<br />
&nbsp;&nbsp;&nbsp;for (j = 0; j &lt; 12; ++j) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; }<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (t != -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (m != -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d = m+1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;m = t;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} else if (parseInt(a[i], 10) &lt;= 12 &amp;&amp; m == -1) {<br />
&nbsp;&nbsp;&nbsp;m = a[i]-1;<br />
&nbsp;&nbsp;} else if (parseInt(a[i], 10) &gt; 31 &amp;&amp; y == 0) {<br />
&nbsp;&nbsp;&nbsp;y = parseInt(a[i], 10);<br />
&nbsp;&nbsp;&nbsp;(y &lt; 100) &amp;&amp; (y += (y &gt; 29) ? 1900 : 2000);<br />
&nbsp;&nbsp;} else if (d == 0) {<br />
&nbsp;&nbsp;&nbsp;d = a[i];<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;if (y == 0)<br />
&nbsp;&nbsp;y = today.getFullYear();<br />
&nbsp;if (m != -1 &amp;&amp; d != 0)<br />
&nbsp;&nbsp;return new Date(y, m, d, hr, min, 0);<br />
&nbsp;return today;<br />
};<br />
//扩展完成</font></p>
<p><font face="Verdana">//对象定义</font></p>
<p><font face="Verdana">var vform = new Object;<br />
//获取弹出提示的显示位置<br />
vform.getAbsolutePos = function(el) {<br />
&nbsp;var _p = { x: 0, y: 0 };<br />
&nbsp; do{<br />
&nbsp;&nbsp;&nbsp;&nbsp;_p.x += (el.offsetLeft - el.scrollLeft);<br />
&nbsp;&nbsp;&nbsp;&nbsp;_p.y += (el.offsetTop - el.scrollTop); <br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp; while(el=el.offsetParent)<br />
&nbsp;&nbsp;&nbsp;&nbsp; return _p;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />
vform.toString = function()<br />
{<br />
&nbsp;return("vForm表单验证程序\n版本：1.0beta\n作者：雷晓宝\n时间：2006-07-31\n网址：<a href="http://lxbzj.com" target="_blank">http://lxbzj.com</a>\n许可：LGPL");<br />
}<br />
vform.rules = new Array;<br />
vform.rules.add = function(obj,minLength,dataType,errmsg,maxLength,rule,patams)<br />
{<br />
&nbsp;&nbsp;&nbsp; var curlen = this.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this[curlen] = [obj,minLength,dataType,errmsg,maxLength,rule,patams];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //this[curlen] = [ 0 ,&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; ,&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp; ,&nbsp;&nbsp; 3&nbsp; ,&nbsp;&nbsp; 4&nbsp; ,&nbsp; 5 ,&nbsp;&nbsp; 6&nbsp; ];</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; return this.length;<br />
}<br />
vform.init= function()<br />
{<br />
&nbsp;if(document.getElementById(this.form_id))<br />
&nbsp;{<br />
&nbsp;&nbsp;//获取表单<br />
&nbsp;&nbsp;var o = document.getElementById(this.form_id);<br />
&nbsp;&nbsp;//遍历规则<br />
&nbsp;&nbsp;for(var i = 0 ;i&lt; this.rules.length;i++)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;_r = this.rules[i]<br />
&nbsp;&nbsp;&nbsp;//如果存在元素，则添加验证程序<br />
&nbsp;&nbsp;&nbsp;if(_o = o.elements[_r[0]])<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//判断是是否必填,是否有最小长度<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(_r[1] &gt; 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.required = true;//必填的含义和最小长度为1是一样的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.minLength = parseInt(_r[1]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.required = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.minLength = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;//判断是否有最大长度;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(_r[4])<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.maxLength = parseInt(_r[4]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;//添加长度验证函数<br />
&nbsp;&nbsp;&nbsp;&nbsp;_o.validLength = function ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var b =true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(this.minLength)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b = (this.minLength &lt;= this.value.length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(this.type == 'textarea' &amp;&amp; this.maxLength )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b = b &amp;&amp; (this.maxLength &gt;= this.value.length );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (b);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;//添加验证，进行格式验证<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch(_r[2])<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'e-mail':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.validate = function()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.isvalid = this.validLength() &amp;&amp; this.value.isEmail();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (this.isvalid);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'url':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.validate = function()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (this.value.substring(0,7) != 'http://')this.value = 'http://' +this.value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.isvalid = this.validLength() &amp;&amp; this.value.isUrl();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (this.isvalid);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'date':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.validate = function()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var _d = Date.parse(this.value)||Date.parseDate(this.value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.value =&nbsp; _d.toIsoDate();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.isvalid = this.validLength() &amp;&amp; this.value.isDateTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (this.isvalid);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a=a&gt;b?1:1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'number':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.validate = function()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.isvalid = this.validLength() &amp;&amp; this.value.isInteger();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (this.isvalid);</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'any':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.validate = function()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.isvalid = this.validLength();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp; this.isvalid<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var regexp = /^\\\w+$/;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( regexp.test(_r[2]))//表示必须和同表单下的某个字段的值一样。用于重复输入的验证<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_el = _r[2].substring(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (o.elements[_el]){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.equal = _el;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.validate = function()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(_o = this.form.elements[this.equal])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( (_o.value == this.value) &amp;&amp; this.validLength())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('setup error');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(_el + 'is not a valid form element');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.validate = function(){return true;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var regexp1 = /^\\(==|!=|&gt;=|&lt;=|&gt;|&lt;)/;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( regexp1.test(_r[2]) )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_s0 = _r[2];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_s1 = RegExp.$1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_s2 = _s0.replace(regexp1,'');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_operator = _s1.substring(0);//比较操作符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var regexp2 = /^\w+$/;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (regexp2.test(_s2))//是一个标志符，整数 或者变量<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.operation = _operator+_s2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.validate = function()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_b = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (this.value.length !=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_b = eval(this.value+this.operation+';');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_b = _b &amp;&amp; this.validLength();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return _b;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;//添加验证提示(div标签)并初始化<br />
&nbsp;&nbsp;&nbsp;&nbsp;var _p = vform.getAbsolutePos(_o);<br />
&nbsp;&nbsp;&nbsp;&nbsp;_o.tip = new tip(_r[3],vform.err_class,_p.x+_o.offsetWidth+3,_p.y);</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;_o.tip.init();<br />
&nbsp;&nbsp;&nbsp;&nbsp;//失去焦点时，开始验证<br />
&nbsp;&nbsp;&nbsp;&nbsp;_o.onblur =function(e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(this.minLength || this.value.length &gt;0) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( this.validate() )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.tip.hide();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.tip.show();//显示错误信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//this.focus(); 添加这句在ie里会导致死循环 :(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;//焦点验证可能会失败,所以最后需要表单提交前的验证作为最后的补充。<br />
&nbsp;&nbsp;document.getElementById(this.form_id).onsubmit = function()<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;var valid = true;<br />
&nbsp;&nbsp;&nbsp;for(i=0;i&lt;this.elements.length;i++)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;_o = this.elements[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(_o.minLength &amp;&amp; !_o.isvalid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_o.tip.show();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valid = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;return valid;<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}<br />
//弹出提示定义<br />
function tip(text,className,x,y)<br />
{<br />
&nbsp;var o = document.createElement("div");<br />
&nbsp;o.style.display = "none";<br />
&nbsp;o.innerHTML = text;<br />
&nbsp;//var t = document.createTextNode(text);<br />
&nbsp;document.body.appendChild(o);<br />
&nbsp;//o.appendChild(t);<br />
&nbsp;<br />
&nbsp;this.init = function(dis)<br />
&nbsp;{<br />
&nbsp;&nbsp;o.className = "info";<br />
&nbsp;&nbsp;o.style.left = x+"px";<br />
&nbsp;&nbsp;o.style.top = y+"px";<br />
&nbsp;&nbsp;o.style.zindex = 100;<br />
&nbsp;&nbsp;if(dis)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;o.style.display = "";<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;o.style.display = "none";<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;this.show = function()<br />
&nbsp;{<br />
&nbsp;&nbsp;o.style.display = "";<br />
&nbsp;}<br />
&nbsp;this.hide = function()<br />
&nbsp;{<br />
&nbsp;&nbsp;o.style.display = "none";<br />
&nbsp;}<br />
}</font></p>
<font face="Verdana">
<p><br />
function start()<br />
{<br />
&nbsp;&nbsp;vform.form_id = 'form1';//必须是表单的id<br />
&nbsp;&nbsp;vform.err_class = 'info';//出错提示的样式<br />
&nbsp;//验证规则，逐条填写<br />
vform.rules.add('frm_name',1,'e-mail','请您按照 [email]user@domain.com[/email] 的格式输入电子邮件地址。<br />
&lt;span style="color:#f00"&gt;必填项目&lt;/span&gt;');<br />
&nbsp;&nbsp;vform.rules.add('myweb',1,'url','请您按照 <a href="http://www.domain.com" target="_blank">http://www.domain.com</a> 的格式输入您的网址。<br />
&lt;span style="color:#f00"&gt;必填项目&lt;/span&gt;');<br />
&nbsp;&nbsp;vform.rules.add('dateinput',0,'date','请按2000-03-05 的格式输入日期。<br />
&lt;span style="color:#f00"&gt;必填项目&lt;/span&gt;');<br />
&nbsp;&nbsp;vform.rules.add('qq',0,'number','这必须是一个整数');<br />
&nbsp;&nbsp;vform.rules.add('least10',10,'any','您必须至少填写10个<br />
&lt;span style="color:#f00"&gt;必填项目&lt;/span&gt;');<br />
&nbsp;&nbsp;vform.rules.add('ok100',1,'any','这里被限制为100个字符<br />
&lt;span style="color:#f00"&gt;必填项目&lt;/span&gt;',100);<br />
&nbsp;&nbsp;vform.rules.add('r_pass0',5,'any','密码最短5位最长20位<br />
&lt;span style="color:#f00"&gt;必填项目&lt;/span&gt;',20);<br />
&nbsp;&nbsp;vform.rules.add('r_pass1',5,"\\r_pass0",'确认密码错误<br />
&lt;span style="color:#f00"&gt;必填项目&lt;/span&gt;',20);<br />
&nbsp;&nbsp;vform.rules.add('frm_sel',1,"\\&gt;2",'必须大于2000<br />
&lt;span style="color:#f00"&gt;必填项目&lt;/span&gt;');<br />
&nbsp;&nbsp;vform.init();<br />
&nbsp;<br />
}</p>
<p>&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body onload="start()"&gt;</p>
<p>&lt;form id="form1" name="form1" method="get" action=""&gt;<br />
&nbsp;&lt;label for="frm_name"&gt;e-mail:<br />
&nbsp;&lt;input name="frm_name" type="text" class="text_input" id="frm_name" title="输入一个电子邮箱地址"/&gt;<br />
&nbsp;&lt;/label&gt;<br />
&nbsp;*<br />
&nbsp;&lt;p&gt;<br />
&nbsp;&nbsp;&lt;label for="r_pass0"&gt;输入密码：<br />
&nbsp;&nbsp;&lt;input name="r_pass0" type="text" class="text_input" id="r_pass0" title="输入您希望的密码 " /&gt;<br />
&nbsp;&nbsp;&lt;/label&gt;<br />
&nbsp;*&lt;/p&gt;<br />
&nbsp;&lt;p&gt;<br />
&nbsp;&nbsp;&lt;label for="r_pass1"&gt;密码确认：<br />
&nbsp;&nbsp;&lt;input name="r_pass1" type="text" class="text_input" id="r_pass1" title="将密码确认一次" /&gt;<br />
&nbsp;&nbsp;&lt;/label&gt;<br />
&nbsp;*&lt;/p&gt;<br />
&nbsp;&lt;p&gt;<br />
&nbsp;&nbsp;&lt;label for="frm_sel"&gt;选择：<br />
&nbsp;&nbsp;&lt;select name="frm_sel" id="frm_sel" title="请选择一个答案"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;option value="0"&gt;请选择一个答案&lt;/option&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;option value="1" selected="selected"&gt;1000&lt;/option&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;option value="2"&gt;2000&lt;/option&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;option value="3"&gt;3000&lt;/option&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;option value="4"&gt;4000&lt;/option&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;option value="5"&gt;5000&lt;/option&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;option value="6"&gt;6000&lt;/option&gt;<br />
&nbsp;&nbsp;&lt;/select&gt;<br />
&lt;/label&gt;<br />
&nbsp;*&lt;/p&gt;<br />
&nbsp;&lt;p&gt;<br />
&nbsp;&nbsp;&lt;label for="input3"&gt;输入网址：<br />
&nbsp;&nbsp;&lt;input name="myweb" type="text" class="text_input" id="input3" title="输入一个网址" onmousemove="" value="http://" maxlength="100"/&gt;<br />
&nbsp;&nbsp;&lt;/label&gt;<br />
&nbsp;*&lt;/p&gt;<br />
&nbsp;&lt;p&gt;<br />
&nbsp;&nbsp;&lt;label for="dateinput"&gt;输入日期<br />
&nbsp;&nbsp;&lt;input name="dateinput" type="text" class="text_input" title="输入一个日期" id="dateinput"/&gt;<br />
&lt;/label&gt;<br />
&nbsp;*&lt;/p&gt;<br />
&nbsp;&lt;p&gt;<br />
&nbsp;&nbsp;&lt;label for="mub"&gt;输入数字<br />
&nbsp;&nbsp;&lt;input name="qq" type="text" class="text_input" title="填写数字" id="mub"/&gt;<br />
&nbsp;&nbsp;&lt;/label&gt;<br />
&nbsp;&lt;/p&gt;<br />
&nbsp;&lt;p&gt;<br />
&nbsp;&nbsp;&lt;label for="len"&gt;输入任意但长度限制为10个<br />
&nbsp;&nbsp;&lt;input name="least10" type="text" class="text_input" maxlength="88" id="len"/&gt;<br />
&nbsp;&nbsp;*<br />
&nbsp;&nbsp;&lt;/label&gt;<br />
&nbsp;&lt;/p&gt;<br />
&nbsp;&lt;p&gt;<br />
&nbsp;&nbsp;&lt;label for="text"&gt;只能输入100个<br />
&nbsp;&nbsp;&lt;textarea name="ok100" cols="40" rows="5" id="text" title="详细内容"&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;*<br />
&nbsp;&nbsp;&lt;/label&gt;<br />
&nbsp;&lt;/p&gt;<br />
&nbsp;&lt;p&gt;<br />
&nbsp;&nbsp;&lt;input type="submit" name="Submit" value="提交" /&gt;<br />
&nbsp;&nbsp;&lt;button onclick="alert(vform)" &gt;关于验证程序&lt;/button&gt;<br />
&nbsp;&lt;/p&gt;<br />
&lt;/form&gt;<br />
&lt;!--具体的日期设置，必须放在body的结束标签前面--&gt;<br />
&lt;script type="text/javascript"&gt;<br />
&nbsp;&nbsp;vform .init();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Calendar.setup({<br />
&nbsp;&nbsp;&nbsp;inputField&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp; "dateinput",&nbsp;&nbsp; // 把这个改成你需要的 id<br />
&nbsp;&nbsp;&nbsp;ifFormat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp; "%Y-%m-%d %H:%M", // format of the input field<br />
&nbsp;&nbsp;&nbsp;showsTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp; true,<br />
&nbsp;&nbsp;&nbsp;//button&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp; "dateinput_btn", <br />
&nbsp;&nbsp;&nbsp;timeFormat&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp; "24"<br />
&nbsp;&nbsp; });<br />
&nbsp;&lt;/script&gt;<br />
&lt;!--END具体的日期设置，必须放在body的结束标签前面--&gt;<br />
&lt;div class="title"&gt;<br />
&nbsp;&lt;h1&gt;vForm1.0beta&lt;/h1&gt;<br />
&nbsp;&lt;ul&gt;<br />
&nbsp;&nbsp;&lt;li&gt;作者：雷晓宝&lt;/li&gt;<br />
&nbsp;&nbsp;&lt;li&gt;时间：2006-08-08&lt;/li&gt;<br />
&nbsp;&nbsp;&lt;li&gt;网址：<a href="http://lxbzj.com" target="_blank">http://lxbzj.com</a>&lt;/li&gt;<br />
&nbsp;&nbsp;&lt;li&gt;e-mail:lxbzmy@163.com&lt;/li&gt;<br />
&nbsp;&nbsp;&lt;li&gt;许可：LGPL&lt;/li&gt;<br />
&nbsp;&lt;/ul&gt;<br />
&nbsp;&lt;h2&gt;功能简述：&lt;/h2&gt;<br />
&nbsp;&lt;ol&gt;<br />
&nbsp;&nbsp; &lt;li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;h3&gt;验证：&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;http地址。&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;时间日期&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;e-mail&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;数字&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;字符长度检查&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;一项输入与另一项输入比较（例如：密码的确认输入）&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;大小比较（只能有一个比较符号）&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ul&gt;<br />
&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h3&gt;特点&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;扩展容易，可以方便的添加自己需要的验证方式&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;兼容性好（ie5,6 firefox,oprea）。&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;可用性好，没有使用alert()来弹出提示;&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp; &lt;/ol&gt;<br />
&nbsp;&lt;p&gt; &lt;/p&gt;<br />
&nbsp;&lt;h2&gt;使用方法&lt;/h2&gt;<br />
&nbsp;&lt;p&gt;使用时，需要定义一个出错提示框的样式，本例的样式为：&lt;code&gt;div.info {<br />
&nbsp;&nbsp;&nbsp;&nbsp; width: 170px;</p>
<p>&nbsp;&nbsp;&nbsp; overflow:visible;</p>
<p>&nbsp;&nbsp;&nbsp; height:auto;</p>
<p>&nbsp;&nbsp;&nbsp; font-size: small;</p>
<p>&nbsp;&nbsp;&nbsp; position: absolute;</p>
<p>&nbsp;&nbsp;&nbsp; background-color: #FFffdd;</p>
<p>&nbsp;&nbsp;&nbsp; border: 1px solid #000;</p>
<p>&nbsp;&nbsp;&nbsp; filter:progid:DXImageTransform.Microsoft.Shadow(color=#111111,direction=135,strength=3);</p>
<p>&nbsp;&nbsp;&nbsp; padding: 5px;</p>
<p>&nbsp;&nbsp;&nbsp; }&lt;/code&gt;&lt;/p&gt;<br />
&nbsp;&lt;p&gt;然后在网页&amp;lt;head&amp;gt;部分中添加&lt;code&gt;&amp;lt;script type="text/javascript" src="calendar/calendar.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;</p>
<p>&nbsp;&nbsp; ，然后可以写一个函数设置表单名称，验证规则，&lt;code&gt;function start()</p>
<p>&nbsp;&nbsp; { <br />
&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp; vFormvform.form_id = 'form1';</p>
<p>&nbsp;&nbsp;vform.err_class = 'info';</p>
<p>&nbsp;&nbsp;// (obj,required(true/false),dataType,errmsg,minlen,maxlen,rule,patams)</p>
<p>&nbsp;&nbsp;//验证规则，逐条填写</p>
<p>&nbsp;&nbsp;vform.rules.add('frm_name',1,'e-mail','请您按照 [email]user@domain.com[/email] 的格式输入电子邮件地址。&amp;lt;br /&amp;gt;&amp;lt;span style="color:#f00"&amp;gt;必填项目&amp;lt;/span&amp;gt;');</p>
<p>&nbsp;&nbsp;vform.rules.add('myweb',1,'url','请您按照 <a href="http://www.domain.com" target="_blank">http://www.domain.com</a> 的格式输入您的网址。&amp;lt;br /&amp;gt;&amp;lt;span style="color:#f00"&amp;gt;必填项目&amp;lt;/span&amp;gt;');</p>
<p>&nbsp;&nbsp;vform.rules.add('dateinput',0,'date','请按2000-03-05 的格式输入日期。&amp;lt;br /&amp;gt;&amp;lt;span style="color:#f00"&amp;gt;必填项目&amp;lt;/span&amp;gt;');</p>
<p>&nbsp;&nbsp;vform.rules.add('qq',0,'number','这必须是一个整数');</p>
<p>&nbsp;&nbsp;vform.rules.add('least10',10,'any','您必须至少填写10个&amp;lt;br /&amp;gt;&amp;lt;span style="color:#f00"&amp;gt;必填项目&amp;lt;/span&amp;gt;');</p>
<p>&nbsp;&nbsp;vform.rules.add('ok100',1,'any','这里被限制为100个字符&amp;lt;br /&amp;gt;&amp;lt;span style="color:#f00"&amp;gt;必填项目&amp;lt;/span&amp;gt;',100);</p>
<p>&nbsp;&nbsp; vform.init();</p>
<p>&nbsp;&nbsp; }&lt;/code&gt;最后为body添加onload事件。&nbsp;&nbsp; &lt;code&gt;&nbsp;&nbsp; &amp;lt;body onload="start();"&amp;gt;<br />
&nbsp;&lt;/code&gt;&lt;/p&gt;<br />
&nbsp;&lt;p&gt; &lt;/p&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</font></p>
<img src ="http://www.cnblogs.com/nianshi/aggbug/1214206.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37594/" target="_blank">[新闻]互联网DNS存在重大漏洞 黑客可能控制网络流量</a>]]></description></item><item><title>Javascript跑马灯效果</title><link>http://www.cnblogs.com/nianshi/archive/2008/06/05/1214124.html</link><dc:creator>念时</dc:creator><author>念时</author><pubDate>Thu, 05 Jun 2008 02:25:00 GMT</pubDate><guid>http://www.cnblogs.com/nianshi/archive/2008/06/05/1214124.html</guid><wfw:comment>http://www.cnblogs.com/nianshi/comments/1214124.html</wfw:comment><comments>http://www.cnblogs.com/nianshi/archive/2008/06/05/1214124.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/nianshi/comments/commentRss/1214124.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/nianshi/services/trackbacks/1214124.html</trackback:ping><description><![CDATA[<p><font face="Verdana">//在浏览器状态栏里显示。<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;script Language="JavaScript"&gt;<br />
var msg="这是一个跑马灯效果的JavaScript文档";<br />
var interval = 100;<br />
var spacelen = 120;<br />
var space10=" ";<br />
var seq=0;<br />
function Scroll() { <br />
len = msg.length;<br />
window.status = msg.substring(0, seq+1);<br />
seq++;<br />
if ( seq &gt;= len ) { <br />
seq = spacelen; <br />
window.setTimeout("Scroll2();", interval );<br />
}<br />
else<br />
window.setTimeout("Scroll();", interval );<br />
} </font></p>
<p><font face="Verdana">function Scroll2() { <br />
var out="";<br />
for (i=1; i&lt;=spacelen/space10.length; i++) out += <br />
space10;<br />
out = out + msg;<br />
len=out.length;<br />
window.status=out.substring(seq, len);<br />
seq++;<br />
if ( seq &gt;= len ) { seq = 0; };<br />
window.setTimeout("Scroll2();", interval );<br />
} </font></p>
<p><font face="Verdana">Scroll();</font></p>
<p><font face="Verdana">&lt;/script&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</font></p>
<img src ="http://www.cnblogs.com/nianshi/aggbug/1214124.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37594/" target="_blank">[新闻]互联网DNS存在重大漏洞 黑客可能控制网络流量</a>]]></description></item><item><title>软件的价值（转）</title><link>http://www.cnblogs.com/nianshi/archive/2008/06/04/1213783.html</link><dc:creator>念时</dc:creator><author>念时</author><pubDate>Wed, 04 Jun 2008 09:37:00 GMT</pubDate><guid>http://www.cnblogs.com/nianshi/archive/2008/06/04/1213783.html</guid><wfw:comment>http://www.cnblogs.com/nianshi/comments/1213783.html</wfw:comment><comments>http://www.cnblogs.com/nianshi/archive/2008/06/04/1213783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/nianshi/comments/commentRss/1213783.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/nianshi/services/trackbacks/1213783.html</trackback:ping><description><![CDATA[<h2><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/xdesigner/archive/2006/09/14/504142.html">软件的价值</a> </h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 今天跟某个国内开源软件作者聊天，他抱怨：&#8220;在中国，程序员都希望用免费的，而且你即使免费，不是大厂，还不敢用，所以他还要你开源，有了源码吧，他还不去研究，希望扩充功能还想原作者去扩充。所以，就程序员这一点，也注定了程序员自己很苦很穷&#8221;。</p>
<p>&nbsp;&nbsp;&nbsp; 这就让我想起了软件的价值这个话题。</p>
<p>&nbsp;&nbsp;&nbsp; 一百年前，马克思就说过，商品就是用于交换的凝结着人类智慧和体力的劳动成果。并讨论过商品的价格和价值的关系。价值是相对稳定的，价格是围绕着价值来回波动，但从长期看，价格反映价值。但马克思限于当时的科技水平，想必没有考虑过计算机软件这种商品的问题吧。</p>
<p>&nbsp;&nbsp;&nbsp; 首先计算机软件是商品，它是作者绞尽脑汁作出来的用来卖钱的劳动成果，只是里面主要凝结着人类智慧，没有多少体力，但确实是劳动成果。这个劳动成果用于交换，而且在比较成熟的市场经济环境下，那它就能卖出应用的价钱。但是软件这个商品同传统商品相比有三大特点，1。可低成本大规模复制，2。它不是实体，3，软件消耗自然资源少，它大部分只是人力成本。它只是一种信息。这很容易导致盗版和人民对软件价值的认识不足。</p>
<p>&nbsp;&nbsp;&nbsp; 盗版的罪恶罄竹难书，它严重破坏市场经济体制，浪费了大量的社会资源，盗版养活了几个困难人士，成就了少数富翁，但浪费了数以亿计的投资，成千上万的高级人力资源辛苦工作的结果被人毫不尊重的非常浪费的利用，这是何等的不公。<br />
</p>
<p>&nbsp;&nbsp;&nbsp; 盗版分为个人盗版和商业盗版,个人盗版原因可能是没钱卖正版或只是暂时学习研究用,并不用它来赚钱，这是有一些理由的，但毕竟盗版是不尊重软件作者的行为，应当减少。而商业盗版则是使用盗版来赚钱，情节恶劣，动机不好，应当受到严厉打击。目前国内的盗版率我猜测有90％以上，根据我国的国情，个人盗版率应当控制在60％以下，商业盗版率应越低越好。<br />
<br />
&nbsp;&nbsp;&nbsp; 以前看到一个做加密光盘的广告&#8220;世界上本来没有救世主，软件加密靠自己&#8221;，其实我一直认为，对付盗版有且只有一个救世主，那就是阿政，可惜阿政对盗版整治不力，让我非常失望。最近国家搞打击盗版百日行动，但几天前路过珠江路，还是发现路边不少兜售盗版光盘的人。我一直搞不清楚，盗版对提高GDP有什么好处，为何阿政不大管？</p>
<p>&nbsp;&nbsp;&nbsp; 前几天中国要求欧盟承认中国是完整的市场经济，欧盟没答应，想必诸位心中对此也没什么底气吧。就对软件市场，只要有严重的盗版，完整成熟的软件市场体制就不可能实现。虽然国家对软件行业现在比较扶持，不断的输血，但是这边输血，盗版在那边吸血，这让我想起小学一个数学题目，一个水池，一边注水，一边放水，多久注满？这种可笑的现象却在神州大地上多处演绎，这种日子何时是个头啊。</p>
<p>&nbsp;&nbsp;&nbsp; 长期严重盗版导致一些人对软件的价值认识不足，认为所有的软件，无论大小，都应当是一张盗版光盘的钱，目前是4块钱，现在存在很多盗版破解软件站点，那软件的价格也就是很低廉的上网费了。长此以往，软件真的就是很软弱很渺小了。</p>
<p>&nbsp;&nbsp;&nbsp; 其实每个软件都凝集这作者很多的智慧，而且很多软件能帮助使用者简单的处理很复杂的问题，对客户带来的价值都不低。现在软件让人类以神仙般的速度处理海量信息，就像飞机让人类以神仙般的速度旅行一样，都对客户带来很大的价值，但凭什么飞机贵而软件贱。</p>
<p>&nbsp;&nbsp;&nbsp; 其实软件的遭遇就代表了知识产权的遭遇，知识产权作品是不同于其他产品，它无形无色，看不见摸不着，因此不了解它的人是不明白它的价值的。而一般的人对于不了解的事物就认为是没有价值的。随着人们的知识水平的提高，人们就对知识产权日益了解，人们也就更容易明白知识产权的价值，也就更容易认同知识产权的价值。</p>
<p>&nbsp;&nbsp;&nbsp; 目前，领导和掌握这个社会的主要是我们的父母辈，也就是上世纪五六七十年代出生的人，这辈人有一个共同的特点就是年轻的时候经历了文化大革命，本该好好学习天天向上，但历史却让他们去闹无意义的革命，造成他们没有经过应有的教育，知识水平不高，因此对知识产权了解不够，也就谈不上认同软件的价值了。这辈人思想水平已经定型了，已经无法大面积的改变。</p>
<p>&nbsp;&nbsp;&nbsp; 我们这辈人经过比上辈人好的多的教育，知识水平相对比较高，对知识产权有所了解，因此有认同软件的价值的基础和能力。相信过十年二十年后成为社会的主宰后，到时很有可能能建立合理的软件价值观念，到时候才能建立完整成熟的市场经济体制。</p>
<p>&nbsp;&nbsp;&nbsp; 但是我们不必等十年二十年，我们现在就可以为此工作。</p>
<p>&nbsp;&nbsp;&nbsp; 首先我们这些计算机软件开发人员自身是开发软件的，有相对突出的知识水平，对知识产权比较了解，因此首先是自己认同软件的价值，再也不能认为软件就值4块钱。你尊重别人的软件，别人也尊重自己的软件，大家相互尊重，共同维护软件的价值，大家都是编程的，都知道一行行代码，一个个文档都是凝集着人类的智慧和创造力，都是辛勤的劳动成果。理应受到尊重。中国的软件业也不小，开发人员也不少，都是优质青年，团结起来还是很有力量的。大家记住，尊重别人就是尊重自己。</p>
<p>&nbsp;&nbsp;&nbsp; 广大软件破解者们，请手下留情，你们破解别人的吐血之作，让别人毫无收益，你们赚了1元钱，但浪费了这个行业的几百几千元的投入，这严重打击创新型社会的建立过程。大家都是软件行业人士，你们在船底凿洞喝水，等船沉了，大家都完蛋。</p>
<p>&nbsp;&nbsp;&nbsp; 大家自己尊重认同软件的价值，也应当向周围人推销软件价值的观念。这不但能给行外人士树立一个高手形象，而且有利于增加软件行业的整体收益，最终是大家都获益。</p>
<p>&nbsp;&nbsp;&nbsp; 最后小弟带头赤身裸体冰天雪地珠穆朗玛峰顶二指禅跪求阿政大力保护知识产权，保护创新，建立真正全面的市场经济体制和创新型社会。</p>
<img src ="http://www.cnblogs.com/nianshi/aggbug/1213783.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37593/" target="_blank">[新闻]Opera提出网络标准课程 发布标准教育倡议</a>]]></description></item><item><title>ASP.NET验证码技术（C#）</title><link>http://www.cnblogs.com/nianshi/archive/2008/06/04/1213761.html</link><dc:creator>念时</dc:creator><author>念时</author><pubDate>Wed, 04 Jun 2008 09:16:00 GMT</pubDate><guid>http://www.cnblogs.com/nianshi/archive/2008/06/04/1213761.html</guid><wfw:comment>http://www.cnblogs.com/nianshi/comments/1213761.html</wfw:comment><comments>http://www.cnblogs.com/nianshi/archive/2008/06/04/1213761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/nianshi/comments/commentRss/1213761.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/nianshi/services/trackbacks/1213761.html</trackback:ping><description><![CDATA[课程说明
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;大家好，在上一节课程中，我们开始了解了如何在在</span><span>ASP.NET</span><span>中使用图形编程的技术。今天我们针对验证码技术深入的了解图形编程在</span><span>ASP.NET</span><span>中的应用。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;验证码技术是目前很多</span><span>WEB</span><span>程序采用的一种安全防御技术。系统在登录的时候不但要输出用户名和密码，还要额外输入一种随机生成的验证码文本，此时用户需要正确的输入这三个信息才能登录到系统中。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;由于验证码技术能有效的抵御某些黑客攻击，因此得到相当广泛的应用，而且在一些</span><span>C/S</span><span>系统中也采用了这种源自</span><span>WEB</span><span>开发的技术。</span></p>
<font size="5"><strong><span style="font-family: 黑体">验证码原理</span></strong></font>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;在现在的软件运行环境下，安全成为大部分软件必须考虑的问题，黑客无处不在，攻击方式日益丰富，尤其是</span><span>WEB</span><span>系统由于其开放性更是遇到严峻的考验，黑客事件层出不穷，造成的损失和影响也不断变大，对此我们软件开发人员需要对此有相当的认识并采取措施抵御各种黑客攻击。</span></p>
<font size="4"><strong><span>枚举字典安全攻击</span></strong></font>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;在各种黑客攻击中，很常见的就是套取用户名和密码，其中很多是采用枚举字典的方式来不断的测试用户名和密码。</span></p>
<p><span><img height="661" alt="" src="http://www.cnblogs.com/images/cnblogs_com/xdesigner/checkcode.gif" width="671" border="0" v:shapes="_x0000_i1025" /></span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;比如某黑客获得一银行账号，然后打开账号的开户银行的网上银行登录界面。分析其中的</span><span>HTML</span><span>代码，发现其页面粗制滥造，没有验证码，没有任何安全控制，只要求输入银行账号和取款密码就可以登录。黑客心中大喜，马上写了一个程序，直接调用</span><span>HTTP</span><span>协议，使用程序来模拟浏览器向网上银行服务器提交账号和密码尝试登录。由于取款密码是</span><span>6</span><span>位阿拉伯数字，因此也就有一百万种组合，黑客的电脑从六个零开始测试一直到六个九，这一定会测试出真正的密码。黑客找到一台宽带高速上网的电脑，运行套取取款密码程序后就忙其他事了，假设这台电脑</span><span>1</span><span>秒能测试</span><span>10</span><span>个密码，于是花费</span><span>10</span><span>万秒的时间肯定能找到密码。</span><span>10</span><span>万秒也就是</span><span>27</span><span>小时，一天多点的时间，实际上很可能用不了那么长的时间。黑客外头转了一圈回来，发现密码已经找到了，于是马上登录网上银行捞钱，或者伪造一个银行卡去</span><span>ATM</span><span>机上提取现金。也就是说黑客最多花了一天时间即可获得数目不可预知的非法收入。</span></p>
<font size="4"><strong><span>验证码防御</span></strong></font>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;网上银行可以有很多手段来抵御黑客攻击，比如使用</span><span>ActiveX</span><span>控件代替标准的文本框来输入账号和密码，可以使用</span><span>USB</span><span>接口的密码盘来进行数据加密和检测，或者使用一个客户端程序代替浏览器来登录网上银行。但这些是客户端技术，千千万万的黑客可以操着各种手术刀来解剖这些技术，从根本上说客户端技术是不可靠的。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;相对而言采用服务器端技术就比较安全了。比如发现密码连续错误</span><span>3</span><span>次即锁定账户，</span><span>1</span><span>天后才能登录；也可以使用验证码技术来很大程度的抵御枚举字典套取密码的攻击。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;现有一个新的网上银行，和旧网银差不多，但采用了验证码技术，用户登录时除了要输入账号和取款密码，浏览器还显示一个图片，里面显示了一些潦草的字符，用户需要辨认这些字符然后再输入进去，浏览器向服务器提交表单时会附加用户输入的验证码，服务器接受表单数据后除了校验账号和取款密码后，还要检查验证码是否输入正确，若登录信息校验失败，则服务器端则会提示重新登录，而且还生成包含随机内容的新的验证码，用户在次登录时又得重新识别新的验证码了。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;由于正确的验证码文本是保存在服务器上的，客户端的黑客程序不可能获得，验证码的内容是随机的，黑客程序也无法找到规律，只能辨认从服务器端发出的包含验证码的图片来获得验证码。这里就体现了电脑和人脑的差别了，人脑在图形识别方面远远超过了目前的电脑，服务器端使用一些技术生成的书写潦草，充满随机分布的杂点的图片，人脑是可以相当容易的识别的，但目前的电脑是难以识别的。黑客程序无法识别验证码，只能显示图片让黑客亲自辨认，这时每测试一次密码，黑客都得仔细辨认一下验证码图片，然后手工输入验证码文本。最多要输入一百万次，估计全世界没人会愿意进行这样的工作。这样验证码技术就有效的抵御了这种枚举字典测试密码的安全攻击。此时黑客会转而寻找其他方法，而大量的初级黑客会放弃攻击这个网站。</span></p>
<font size="4"><strong><span>验证码技术概念</span></strong></font>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;验证码技术利用了人脑和电脑之间的差别。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;大家都知道电脑和人脑是存在很大的差别的，电脑很胜任数值运算和精确的逻辑判断，很适合执行那些重复又重复的简单数据处理，但图像识别，模糊逻辑判断，学习和创新能力很差。而人脑正好相反，数值运算不行，但图像识别却很擅长。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;在验证码技术中，有一个很关键的过程就是需要从一个充满随机形状的图片中辨认出验证码文本，这个过程目前的电脑是难以实现的，而对人脑却能相当容易。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;采用电脑难于识别而人脑容易识别的图片，强迫人脑参与安全信息验证过程，就是验证码技术。这里包含验证码文本的图片是验证码媒介。仔细观察，我们可以知道这种验证码媒介具有电脑创建容易识别难的特点，因此类似的我们也可以采用合成语音等其他手段来作为验证码媒介。例如服务器提供一个类似</span><span>QQ</span><span>表情的图片，加上噪声，然后让用户判断选择这个图片的表情状态，是哭是笑还是流鼻血，这样也可以当作验证码。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;由于枚举字典安全攻击需要大数量的尝试猜测安全信息，其重复过程可能需要数万甚至数亿次，而验证码技术强迫了人脑参与每一次尝试猜测安全信息，人脑难以胜任长时间高频率的简单重复劳动，因此这就使得枚举字典安全攻击变得不可行，如此应用程序成功的防御了枚举字典安全攻击。</span></p>
<font size="5"><strong><span>ASP.NET</span><span style="font-family: 黑体">中使用验证码技术</span></strong></font>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;由于验证码技术中服务器程序需要创建验证码图片，里面用到了图形编程，因此本节课程仍然是</span><span>C#</span><span>发现之旅的图形编程系列教程。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;根据验证码的原理，我们使用</span><span>C#</span><span>在</span><span>ASP.NET</span><span>中实现了验证码的功能。</span></p>
<font size="4"><strong><span>checkimage.aspx</span></strong></font>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;首先根据上节课程的内容，我们要创建一个图片服务页面，专门用于提供包含验证码文本的图片，为此我们建立一个</span><span> checkimage.aspx </span><span>的页面。其</span><span>HTML</span><span>代码很简单，只有一行，不输出任何内容。在其</span><span>Page_Load</span><span>方法中就有创建验证码图片的过程。</span></p>
<table cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td><br />
            <span style="color: green">// 创建一个包含随机内容的验证码文本</span> <br />
            <span>System.Random rand = <span style="color: blue">new</span> Random();</span> <br />
            <span style="color: blue">int</span><span style="font-family: 宋体"> len = rand.Next(4 , 6 );</span> <br />
            <span style="color: blue">char</span><span style="font-family: 宋体">[] chars = <span style="color: red">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</span>.ToCharArray();</span> <br />
            <span>System.Text.StringBuilder myStr = <span style="color: blue">new</span> System.Text.StringBuilder();</span> <br />
            <span style="color: blue">for</span><span style="font-family: 宋体">( <span style="color: blue">int</span> iCount = 0 ; iCount &lt; len ; iCount ++ )</span> <br />
            <span>{</span> <br />
            <span>&nbsp;&nbsp;&nbsp; myStr.Append( chars[ rand.Next( chars.Length )]);</span> <br />
            <span>}</span> <br />
            <span style="color: blue">string</span><span> text = myStr.ToString();</span> <br />
            <span style="color: green">// 保存验证码到 session 中以便其他模块使用</span> <br />
            <span style="color: blue">this</span><span style="font-family: 宋体">.Session[<span style="color: red">"checkcode"</span>] = text ;</span> <br />
            <span>Size ImageSize = Size.Empty ;</span> <br />
            <span>Font myFont = <span style="color: blue">new</span> Font(<span style="color: red">"MS Sans Serif"</span> , 20 );</span> <br />
            <span style="color: green">// 计算验证码图片大小</span> <br />
            <span style="color: blue">using</span><span>( Bitmap bmp = <span style="color: blue">new</span> Bitmap( 10 , 10 ))</span> <br />
            <span>{</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">using</span>( Graphics g = Graphics.FromImage( bmp ))</span> <br />
            <span>&nbsp;&nbsp;&nbsp; {</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SizeF size = g.MeasureString( text , myFont , 10000 );</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageSize.Width = ( <span style="color: blue">int</span> ) size.Width + 8 ;</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageSize.Height = ( <span style="color: blue">int</span> ) size.Height + 8 ;</span> <br />
            <span>&nbsp;&nbsp;&nbsp; }</span> <br />
            <span>}</span> <br />
            <span style="color: green">// 创建验证码图片</span> <br />
            <span style="color: blue">using</span><span>( Bitmap bmp = <span style="color: blue">new</span> Bitmap( ImageSize.Width , ImageSize.Height ))</span> <br />
            <span>{</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: green">// 绘制验证码文本</span></span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">using</span>( Graphics g = Graphics.FromImage( bmp ))</span> <br />
            <span>&nbsp;&nbsp;&nbsp; {</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.Clear( Color.White );</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">using</span>( StringFormat f = <span style="color: blue">new</span> StringFormat())</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.Alignment = StringAlignment.Near ;</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.LineAlignment = StringAlignment.Center ;</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.FormatFlags = StringFormatFlags.NoWrap ;</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.DrawString( </span><br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text , </span><br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myFont , </span><br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Brushes.Black , </span><br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">new</span> RectangleF( </span><br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 , </span><br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 , </span><br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageSize.Width ,</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageSize.Height ),</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f );</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<span style="color: green">//using</span></span> <br />
            <span>&nbsp;&nbsp;&nbsp; }<span style="color: green">//using</span></span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: green">// 制造噪声 杂点面积占图片面积的 30%</span></span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">int</span> num = ImageSize.Width * ImageSize.Height * 30 / 100 ;</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">for</span>( <span style="color: blue">int</span> iCount = 0 ; iCount &lt; num ; iCount ++ )</span> <br />
            <span>&nbsp;&nbsp;&nbsp; {</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green">// 在随机的位置使用随机的颜色设置图片的像素</span></span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">int</span> x = rand.Next( ImageSize.Width );</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">int</span> y = rand.Next( ImageSize.Height );</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">int</span> r = rand.Next( 255 );</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">int</span> g = rand.Next( 255 );</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">int</span> b = rand.Next( 255 );</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Color c = Color.FromArgb( r , g , b );</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bmp.SetPixel( x , y , c );</span> <br />
            <span>&nbsp;&nbsp;&nbsp; }<span style="color: green">//for</span></span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: green">// 输出图片</span></span> <br />
            <span>&nbsp;&nbsp;&nbsp; System.IO.MemoryStream ms = <span style="color: blue">new</span> System.IO.MemoryStream();</span> <br />
            <span>&nbsp;&nbsp;&nbsp; bmp.Save( ms , System.Drawing.Imaging.ImageFormat.Png );</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">this</span>.Response.ContentType = <span style="color: red">"image/png"</span>;</span> <br />
            <span>&nbsp;&nbsp;&nbsp; ms.WriteTo( <span style="color: blue">this</span>.Response.OutputStream );</span> <br />
            <span>&nbsp;&nbsp;&nbsp; ms.Close();</span> <br />
            <span>}<span style="color: green">//using</span></span> <br />
            <span>myFont.Dispose();</span></td>
        </tr>
    </tbody>
</table>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;首先我们使用</span><span>.NET</span><span>框架中随机数生成器</span><span> Random</span><span>类型来生成一个不定长的包含随机数字和英文字符的文本，这就是验证码原始文本，我们将其保存在</span><span>session</span><span>中供以后使用。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;然后我们创建一个临时图片，并据此创建一个临时的图象绘制对象，然后调用</span><span>Graphics</span><span>的</span><span>MeasureString</span><span>函数获得这个字符串的显示大小。据此我们就可以计算出验证码图片的大小。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;然后我们创建一个位图对象，在此基础上创建一个图形绘制对象，然后调用图形绘制对象的</span><span>DrawString</span><span>函数将验证码文本绘制在这个位图上。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;绘制验证码后我们在图片上随机的制造杂点来混淆图片内容。这些杂点的面积占图片面积的</span><span>30%</span><span>，而且其位置和颜色都是随机的。这些杂点能严重的干扰程序辨认验证码文本。但人脑在辨认文本时能比较轻松的排除这些干扰。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;图片生成后页面就使用</span><span>PNG</span><span>格式将图片文档发送到客户端。</span></p>
<p><span>checkimage.aspx</span><span>还提供了一个静态函数来检测验证码。</span></p>
<table cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td><span style="color: gray">///</span><span style="color: green; font-family: 宋体"> </span><span style="color: gray">&lt;summary&gt;</span> <br />
            <span style="color: gray">///</span><span style="color: green; font-family: 宋体"> 检查指定的文本是否匹配验证码</span> <br />
            <span style="color: gray">///</span><span style="color: green; font-family: 宋体"> </span><span style="color: gray">&lt;/summary&gt;</span> <br />
            <span style="color: gray">///</span><span style="color: green; font-family: 宋体"> </span><span style="color: gray">&lt;param name="text"&gt;</span><span style="color: green">要判断的文本</span><span style="color: gray">&lt;/param&gt;</span> <br />
            <span style="color: gray">///</span><span style="color: green; font-family: 宋体"> </span><span style="color: gray">&lt;returns&gt;</span><span style="color: green; font-family: 宋体">是否匹配</span><span style="color: gray">&lt;/returns&gt;</span> <br />
            <span style="color: blue">public</span><span> <span style="color: blue">static</span> <span style="color: blue">bool</span> CheckCode( <span style="color: blue">string</span> text )</span> <br />
            <span>{</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">string</span> txt = System.Web.HttpContext.Current.Session[<span style="color: red">"checkcode"</span>] <span style="color: blue">as</span> <span style="color: blue">string</span> ;</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">return</span> text == txt ;</span> <br />
            <span>}</span></td>
        </tr>
    </tbody>
</table>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;代码很简单。就是看看参数传进的文本是否等于</span><span> session </span><span>中保存的验证码文本。其他的页面程序调用这个函数就可以判断验证码的正确性。</span></p>
<font size="4"><strong><span>login.aspx</span></strong></font>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;验证码图片服务页面完成后，我们就可以利用这个页面来实现验证码技术。我们建立一个模拟系统登录的页面。</span></p>
<p><span><img height="191" alt="" src="http://www.cnblogs.com/images/cnblogs_com/xdesigner/checkcodeui.gif" width="447" border="0" v:shapes="_x0000_i1026" /></span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;上面放置输入用户名，密码和验证码的三个文本输入框。其中验证码输入框后面放置一个图片，图片就来源于</span><span>checkimage.aspx</span><span>页面。用户输入三个信息后点击确定按钮进行登录。则运行该按钮的服务器段代码。</span></p>
<table cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td><span style="color: blue">private</span><span> <span style="color: blue">void</span> cmdOK_Click(<span style="color: blue">object</span> sender, System.EventArgs e)</span> <br />
            <span>{</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">string</span> UserName = <span style="color: blue">this</span>.txtUserName.Text ;</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">string</span> Password = <span style="color: blue">this</span>.txtPassword.Text ;</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">string</span> CheckCode = <span style="color: blue">this</span>.txtCheckCode.Text ;</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">if</span>( UserName == <span style="color: red">"张三"</span></span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; Password == <span style="color: red">"abc"</span></span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; checkimage.CheckCode( CheckCode ) )</span> <br />
            <span>&nbsp;&nbsp;&nbsp; {</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">this</span>.lblResult.Text = <span style="color: red">"&lt;b&gt;登录成功&lt;/b&gt;"</span>;</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">this</span>.RegisterStartupScript(<span style="color: red">"a"</span> , <span style="color: red">"&lt;script&gt;alert('登录成功');&lt;/script&gt;"</span>);</span> <br />
            <span>&nbsp;&nbsp;&nbsp; }</span> <br />
            <span>&nbsp;&nbsp;&nbsp; <span style="color: blue">else</span></span> <br />
            <span>&nbsp;&nbsp;&nbsp; {</span> <br />
            <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">this</span>.lblResult.Text = <span style="color: red">"&lt;font color=red&gt;&lt;b&gt;用户登录信息错误，请重新输入&lt;/b&gt;&lt;/font&gt;"</span>;</span> <br />
            <span>&nbsp;&nbsp;&nbsp; }</span> <br />
            <span>}</span></td>
        </tr>
    </tbody>
</table>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;在该代码中，程序获得用户输入的用户名，密码和验证码，然后判断用户名密码是否正确，还调用</span><span>checkimage</span><span>的静态函数</span><span>CheckCode</span><span>来判断验证码是否正确。只有这三个信息都正确则登录成功，否则登录失败。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;在少数情况下，程序生成的验证码图片难以辨认，则需要重新提供新的验证码图片，此时我们在登录页面中可以双击这个图片来更新验证码图片。显示验证码图片的</span><span>HTML</span><span>代码片断为</span></p>
<table cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td><span style="color: blue">&lt;</span><span style="color: maroon; font-family: 宋体">img</span><span style="color: fuchsia"> </span><span style="color: red; font-family: 宋体">src</span><span style="color: blue">="checkimage.aspx"</span><span style="color: fuchsia"> </span><br />
            <span style="color: fuchsia">&nbsp;&nbsp;&nbsp; </span><span style="color: red">title</span><span style="color: blue">='看不清楚，双击图片换一张。'</span> <br />
            <span style="color: fuchsia">&nbsp;&nbsp;&nbsp; </span><span style="color: red">ondblclick</span><span style="color: blue">="this.src = 'checkimage.aspx?flag=' + Math.random() "</span> <br />
            <span style="color: fuchsia">&nbsp;&nbsp;&nbsp; </span><span style="color: red">border</span><span style="color: blue">="1"&gt;</span></td>
        </tr>
    </tbody>
</table>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;可以看到</span><span> ondblclick </span><span>事件处理中更新了图片来源，这里使用了一个毫无意义的</span><span>flag</span><span>页面参数，这是保证浏览器不会使用本地缓存的验证码图片而是下载最新的验证码图片。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;用户双击图片后，浏览器重新调用</span><span>checkimage.aspx</span><span>页面，于是服务器端的验证码文本用了新的，而图片内容也随之更新。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;由于每次尝试登录或更换验证码图片时，正确的验证码都是随机的发生改变，毫无规律，这样就很大的增强了登录页面的安全性。但这样做会让用户登录时需要辨认和输入验证码，这会降低应用程序的可用性。因此是否使用验证码技术是需要多方面权衡的。</span></p>
<font size="5"><strong><span style="font-family: 黑体">小结</span></strong></font>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;在本次课程中，我们一起研究了验证码技术的原理，并使用</span><span>C#</span><span>在</span><span>ASP.NET</span><span>中实现了简单的验证码技术。验证码技术是一种安全防御技术，其中使用了一定的图形编程。这样看来图形编程应用是广泛的，可以为很多其他的技术提供支持。</span></p>
<img src ="http://www.cnblogs.com/nianshi/aggbug/1213761.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37593/" target="_blank">[新闻]Opera提出网络标准课程 发布标准教育倡议</a>]]></description></item></channel></rss>