亚洲AV无码AV日韩AV网站,亚洲色婷婷综合久久,亚洲国产系列一区二区三区http://m.tkk7.com/liuquanqi/javazh-cnMon, 12 May 2025 06:47:48 GMTMon, 12 May 2025 06:47:48 GMT60各種數據庫如何讀取前N條記錄 http://m.tkk7.com/liuquanqi/archive/2008/02/22/181348.html☆℡齊☆℡齊Fri, 22 Feb 2008 03:54:00 GMThttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181348.htmlhttp://m.tkk7.com/liuquanqi/comments/181348.htmlhttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181348.html#Feedback0http://m.tkk7.com/liuquanqi/comments/commentRss/181348.htmlhttp://m.tkk7.com/liuquanqi/services/trackbacks/181348.html各種數據庫如何讀取前N條記錄
1. ORACLE
Select * FROM TABLE1 Where ROWNUM<=N

2. INFORMIX
Select FIRST N * FROM TABLE1 where 1=1

3. MYSQL
Select * FROM TABLE1 where 1=1 LIMIT N
(以上三種是俺工作中用到的數據庫)

4. DB2
Select * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM Where ROWNUM<=N
或者
Select COLUMN FROM TABLE where 1=1 FETCH FIRST N ROWS ONLY

5. SQL SERVER
Select TOP N * FROM TABLE1 where 1=1
or
SET ROWCOUNT N Select * FROM TABLE1 where 1=1 SET ROWCOUNT N1

6. SYBASE
SET ROWCOUNT N Select * FROM TABLE1 where 1=1 SET ROWCOUNT N1


7. FOXPRO
Select * TOP N FROM TABLE orDER BY COLUMN

8. ACCESS
Select TOP N * FROM TABLE1 where 1=1



☆℡齊 2008-02-22 11:54 發表評論
]]>
DB2數據庫導出表結構與導入、導出表數據 http://m.tkk7.com/liuquanqi/archive/2008/02/22/181345.html☆℡齊☆℡齊Fri, 22 Feb 2008 03:53:00 GMThttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181345.htmlhttp://m.tkk7.com/liuquanqi/comments/181345.htmlhttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181345.html#Feedback1http://m.tkk7.com/liuquanqi/comments/commentRss/181345.htmlhttp://m.tkk7.com/liuquanqi/services/trackbacks/181345.html方法一

在控制中心的對象視圖窗口中,選擇所要導出表結構的數據表,按住CtrlShift可多選,單擊鼠標右鍵,選擇->生成DDL即可。

方法二

第一步:打開DB2的命令行工具,在DB2安裝目錄的BIN文件夾下新建一個文件夾data,并且進入該目錄。

創建該目錄: mkdir data
進入該目錄: cd data
|

第二步:導出表結構,命令行如下:
db2look -d dbname -e -a -x -i username -w password -o ddlfile.sql


執行成功之后,你會在剛才新建的文件夾下找到該sql文件。

第三步:導出數據,命令行如下:
db2move databasename export -u username -p password

至此,導出數據結束。

2導出表中數據

export to [path(:D:"TABLE1.ixf)] of ixf select [字段(: * or col1,col2,col3)] from TABLE1;

export to [path(:D:"TABLE1.del)] of del select [字段(: * or col1,col2,col3)] from TABLE1;

導入表的數據

import from [path(:D:"TABLE1.ixf)] of ixf insert into TABLE1;

load from [path(:D:"TABLE1.ixf)] of ixf insert into TABLE1;

load from [path(:D:"TABLE1.ixf)] of ixf replace into TABLE1; // 裝入數據前,先刪除已存在記錄

load from [path(:D:"TABLE1.ixf)] of ixf restart into TABLE1; // 當裝入失敗時,重新執行,并記錄導出結果和錯誤信息

import from [path(:D:"TABLE1.ixf)] of ixf savecount 1000 messages [path(:D:"msg.txt)] insert into TABLE1;// 其中,savecount表示完成每1000條操作,記錄一次.

存在自增長字段的數據導入:

load from [path(:D:"TABLE1.ixf)] of ixf modified by identityignore insert into TABLE1;// 加入modified by identityignore.

解除裝入數據時,發生的檢查掛起.

SET INTEGRITY FOR TABLE1 CHECK IMMEDIATE UNCHECKED;

命令只對數據通過約束檢查的表有效,如果執行還不能解除,有必要檢查數據的完整性,是否不符合約束條件,并試圖重新整理數據,再執行裝入操作.

另外,對loadimport,字面上的區別是:裝入和導入,但仍未理解兩者之間的區別.

只是性能上load顯然優于import.load 需要更多的權限)



☆℡齊 2008-02-22 11:53 發表評論
]]>
在Linux下創建CVS用戶:http://m.tkk7.com/liuquanqi/archive/2008/02/22/181338.html☆℡齊☆℡齊Fri, 22 Feb 2008 03:42:00 GMThttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181338.htmlhttp://m.tkk7.com/liuquanqi/comments/181338.htmlhttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181338.html#Feedback0http://m.tkk7.com/liuquanqi/comments/commentRss/181338.htmlhttp://m.tkk7.com/liuquanqi/services/trackbacks/181338.html
在Linux下創建CVS用戶:
1、
cd /home/cvsroot  進入cvs根目錄
ls

2、
perl passwdgen.pl "密碼"  創建密碼并生成加密文件

3、
vi cvsRoot/passwd   打開文件

4、
name:第2步生成的密碼:cvsroot

5、
:s  保存



☆℡齊 2008-02-22 11:42 發表評論
]]>
將.class文件打成Jar包http://m.tkk7.com/liuquanqi/archive/2008/02/22/181337.html☆℡齊☆℡齊Fri, 22 Feb 2008 03:41:00 GMThttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181337.htmlhttp://m.tkk7.com/liuquanqi/comments/181337.htmlhttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181337.html#Feedback0http://m.tkk7.com/liuquanqi/comments/commentRss/181337.htmlhttp://m.tkk7.com/liuquanqi/services/trackbacks/181337.html 輸入  jar cvf 名稱.jar *.*  回車即可。

☆℡齊 2008-02-22 11:41 發表評論
]]>
環境變量的配置http://m.tkk7.com/liuquanqi/archive/2008/02/22/181336.html☆℡齊☆℡齊Fri, 22 Feb 2008 03:35:00 GMThttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181336.htmlhttp://m.tkk7.com/liuquanqi/comments/181336.htmlhttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181336.html#Feedback0http://m.tkk7.com/liuquanqi/comments/commentRss/181336.htmlhttp://m.tkk7.com/liuquanqi/services/trackbacks/181336.html1. (新建)JAVA_HOME:
變量名:JAVA_HOME
變量值:C:\Program Files\Java\jdk1.5.0_05


2. (新建)CLASSPATH:
變量名:CLASS_PATH
變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

            (注意:點號不能省略,表示當前目錄)

3. 編輯PATH的變量值,在后面加上 ;%JAVA_HOME%\bin (注意:要有分號隔開)
變量名:Path
變量值:;%JAVA_HOME%\bin;%TOMCAT_HOME%\bin

變量名:TOMCAT_HOME
變量值:D:\Tomcat 5.5


完成后用命令簡單測試一下: java -version


☆℡齊 2008-02-22 11:35 發表評論
]]>
myeclipse性能提升http://m.tkk7.com/liuquanqi/archive/2008/02/22/181334.html☆℡齊☆℡齊Fri, 22 Feb 2008 03:33:00 GMThttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181334.htmlhttp://m.tkk7.com/liuquanqi/comments/181334.htmlhttp://m.tkk7.com/liuquanqi/archive/2008/02/22/181334.html#Feedback0http://m.tkk7.com/liuquanqi/comments/commentRss/181334.htmlhttp://m.tkk7.com/liuquanqi/services/trackbacks/181334.html1. 加大JVM的非堆內存,
在eclipse的目錄下打開eclipse.ini,如果其中沒有以下代碼,將下列代碼加入即可。
-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=64M
-XX:MaxPermSize=128M

2. 去除不需要加載的模塊
一個系統20%的功能往往能夠滿足80%的需求,MyEclipse也不例外,我們在大多數時候只需要20%的系統功能,所以可以將一些不使用的模塊禁止加載啟動。通過Windows - Preferences打開配置窗口,依次選擇左側的General - Startup and Shutdown,這個時候在右側就顯示出了Eclipse啟動時加載的模塊,可以根據自己的實際情況去除一些模塊。

3. 取消MyEclipse在啟動時自動驗證項目配置文件
默認情況下MyEclipse在啟動的時候會自動驗證每個項目的配置文件,這是一個非常耗時的過程,可以在Preferences窗口依次選擇MyEclipse - Validation,然后在右側的Validator列表中只保留 Manual 項就可以了。如果需要驗證的時候只需要選中文件,然后右鍵選擇 MyEclipse - Run Validation就可以了。



☆℡齊 2008-02-22 11:33 發表評論
]]>
Hibernate的一級緩存和二級緩存http://m.tkk7.com/liuquanqi/archive/2008/01/24/177590.html☆℡齊☆℡齊Thu, 24 Jan 2008 14:19:00 GMThttp://m.tkk7.com/liuquanqi/archive/2008/01/24/177590.htmlhttp://m.tkk7.com/liuquanqi/comments/177590.htmlhttp://m.tkk7.com/liuquanqi/archive/2008/01/24/177590.html#Feedback0http://m.tkk7.com/liuquanqi/comments/commentRss/177590.htmlhttp://m.tkk7.com/liuquanqi/services/trackbacks/177590.html
  緩存的介質一般是內存,所以讀寫速度很快。但如果緩存中存放的數據量非常大時,也會用硬盤作為緩存介質。緩存的實現不僅僅要考慮存儲的介質,還要考慮到管理緩存的并發訪問和緩存數據的生命周期。

  Hibernate的緩存包括Session的緩存和SessionFactory的緩存,其中SessionFactory的緩存又可以分為兩類:內置緩存和外置緩存。Session的緩存是內置的,不能被卸載,也被稱為Hibernate的第一級緩存。SessionFactory的內置緩存和Session的緩存在實現方式上比較相似,前者是SessionFactory對象的一些集合屬性包含的數據,后者是指Session的一些集合屬性包含的數據。SessionFactory的內置緩存中存放了映射元數據和預定義SQL語句,映射元數據是映射文件中數據的拷貝,而預定義SQL語句是在Hibernate初始化階段根據映射元數據推導出來,SessionFactory的內置緩存是只讀的,應用程序不能修改緩存中的映射元數據和預定義SQL語句,因此SessionFactory不需要進行內置緩存與映射文件的同步。SessionFactory的外置緩存是一個可配置的插件。在默認情況下,SessionFactory不會啟用這個插件。外置緩存的數據是數據庫數據的拷貝,外置緩存的介質可以是內存或者硬盤。SessionFactory的外置緩存也被稱為Hibernate的第二級緩存。

  Hibernate的這兩級緩存都位于持久化層,存放的都是數據庫數據的拷貝,那么它們之間的區別是什么呢?為了理解二者的區別,需要深入理解持久化層的緩存的兩個特性:緩存的范圍和緩存的并發訪問策略。

  持久化層的緩存的范圍

  緩存的范圍決定了緩存的生命周期以及可以被誰訪問。緩存的范圍分為三類。

  1 事務范圍:緩存只能被當前事務訪問。緩存的生命周期依賴于事務的生命周期,當事務結束時,緩存也就結束生命周期。在此范圍下,緩存的介質是內存。事務可以是數據庫事務或者應用事務,每個事務都有獨自的緩存,緩存內的數據通常采用相互關聯的的對象形式。

  2 進程范圍:緩存被進程內的所有事務共享。這些事務有可能是并發訪問緩存,因此必須對緩存采取必要的事務隔離機制。緩存的生命周期依賴于進程的生命周期,進程結束時,緩存也就結束了生命周期。進程范圍的緩存可能會存放大量的數據,所以存放的介質可以是內存或硬盤。緩存內的數據既可以是相互關聯的對象形式也可以是對象的松散數據形式。松散的對象數據形式有點類似于對象的序列化數據,但是對象分解為松散的算法比對象序列化的算法要求更快。

  3 集群范圍:在集群環境中,緩存被一個機器或者多個機器的進程共享。緩存中的數據被復制到集群環境中的每個進程節點,進程間通過遠程通信來保證緩存中的數據的一致性,緩存中的數據通常采用對象的松散數據形式。

  對大多數應用來說,應該慎重地考慮是否需要使用集群范圍的緩存,因為訪問的速度不一定會比直接訪問數據庫數據的速度快多少。

  持久化層可以提供多種范圍的緩存。如果在事務范圍的緩存中沒有查到相應的數據,還可以到進程范圍或集群范圍的緩存內查詢,如果還是沒有查到,那么只有到數據庫中查詢。事務范圍的緩存是持久化層的第一級緩存,通常它是必需的;進程范圍或集群范圍的緩存是持久化層的第二級緩存,通常是可選的。

  持久化層的緩存的并發訪問策略

  當多個并發的事務同時訪問持久化層的緩存的相同數據時,會引起并發問題,必須采用必要的事務隔離措施。

  在進程范圍或集群范圍的緩存,即第二級緩存,會出現并發問題。因此可以設定以下四種類型的并發訪問策略,每一種策略對應一種事務隔離級別。

  事務型:僅僅在受管理環境中適用。它提供了Repeatable Read事務隔離級別。對于經常被讀但很少修改的數據,可以采用這種隔離類型,因為它可以防止臟讀和不可重復讀這類的并發問題。

  讀寫型:提供了Read Committed事務隔離級別。僅僅在非集群的環境中適用。對于經常被讀但很少修改的數據,可以采用這種隔離類型,因為它可以防止臟讀這類的并發問題。

  非嚴格讀寫型:不保證緩存與數據庫中數據的一致性。如果存在兩個事務同時訪問緩存中相同數據的可能,必須為該數據配置一個很短的數據過期時間,從而盡量避免臟讀。對于極少被修改,并且允許偶爾臟讀的數據,可以采用這種并發訪問策略。   只讀型:對于從來不會修改的數據,如參考數據,可以使用這種并發訪問策略。

  事務型并發訪問策略是事務隔離級別最高,只讀型的隔離級別最低。事務隔離級別越高,并發性能就越低。

  什么樣的數據適合存放到第二級緩存中?

  1、很少被修改的數據

  2、不是很重要的數據,允許出現偶爾并發的數據

  3、不會被并發訪問的數據

  4、參考數據

  不適合存放到第二級緩存的數據?

  1、經常被修改的數據

  2、財務數據,絕對不允許出現并發

  3、與其他應用共享的數據。

  Hibernate的二級緩存

  如前所述,Hibernate提供了兩級緩存,第一級是Session的緩存。由于Session對象的生命周期通常對應一個數據庫事務或者一個應用事務,因此它的緩存是事務范圍的緩存。第一級緩存是必需的,不允許而且事實上也無法比卸除。在第一級緩存中,持久化類的每個實例都具有唯一的OID。

  第二級緩存是一個可插拔的的緩存插件,它是由SessionFactory負責管理。由于SessionFactory對象的生命周期和應用程序的整個過程對應,因此第二級緩存是進程范圍或者集群范圍的緩存。這個緩存中存放的對象的松散數據。第二級對象有可能出現并發問題,因此需要采用適當的并發訪問策略,該策略為被緩存的數據提供了事務隔離級別。緩存適配器用于把具體的緩存實現軟件與Hibernate集成。第二級緩存是可選的,可以在每個類或每個集合的粒度上配置第二級緩存。

  Hibernate的二級緩存策略的一般過程如下:

  1) 條件查詢的時候,總是發出一條select * from table_name where …. (選擇所有字段)這樣的SQL語句查詢數據庫,一次獲得所有的數據對象。

  2) 把獲得的所有數據對象根據ID放入到第二級緩存中。

  3) 當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,如果配置了二級緩存,那么從二級緩存中查;查不到,再查詢數據庫,把結果按照ID放入到緩存。

  4) 刪除、更新、增加數據的時候,同時更新緩存。

  Hibernate的二級緩存策略,是針對于ID查詢的緩存策略,對于條件查詢則毫無作用。為此,Hibernate提供了針對條件查詢的Query緩存。

  Hibernate的Query緩存策略的過程如下:

  1) Hibernate首先根據這些信息組成一個Query Key,Query Key包括條件查詢的請求一般信息:SQL, SQL需要的參數,記錄范圍(起始位置rowStart,最大記錄個數maxRows),等。

  2) Hibernate根據這個Query Key到Query緩存中查找對應的結果列表。如果存在,那么返回這個結果列表;如果不存在,查詢數據庫,獲取結果列表,把整個結果列表根據Query Key放入到Query緩存中。

  3) Query Key中的SQL涉及到一些表名,如果這些表的任何數據發生修改、刪除、增加等操作,這些相關的Query Key都要從緩存中清空。


☆℡齊 2008-01-24 22:19 發表評論
]]>
struts-config.xml拆分問題http://m.tkk7.com/liuquanqi/archive/2007/06/01/121323.html☆℡齊☆℡齊Fri, 01 Jun 2007 03:11:00 GMThttp://m.tkk7.com/liuquanqi/archive/2007/06/01/121323.html一種方法: 
<param-name>config</param-name>  
  <param-value>/  
  WEB-INF/struts-config.xml,/WEB-INF/struts-one.xml,/WEB-INF/struts-two.xml  
  </param-value>   
另一種方法:   
          <init-param>  
              <param-name>config</param-name>  
              <param-value>/WEB-INF/conf/struts-default.xml</param-value>  
          </init-param>  
          <init-param>  
              <param-name>config/module1</param-name>  
              <param-value>/WEB-INF/conf/struts-module1.xml</param-value>  
          </init-param>  
  后一種方法我覺得多用于分模塊,前一種方法直接簡便!  


☆℡齊 2007-06-01 11:11 發表評論
]]>
webwork 中文亂碼問題 表單字段驗證 標簽的用法http://m.tkk7.com/liuquanqi/archive/2007/03/19/104692.html☆℡齊☆℡齊Mon, 19 Mar 2007 03:18:00 GMThttp://m.tkk7.com/liuquanqi/archive/2007/03/19/104692.htmlhttp://m.tkk7.com/liuquanqi/comments/104692.htmlhttp://m.tkk7.com/liuquanqi/archive/2007/03/19/104692.html#Feedback0http://m.tkk7.com/liuquanqi/comments/commentRss/104692.htmlhttp://m.tkk7.com/liuquanqi/services/trackbacks/104692.htmlWebWork中文問題解決:?
a)在webwork.properties文件中,添加:?
webwork.i18n.encoding?=?UTF-8?
它主要是用來設置WebWork?UI標簽庫的編碼,?
要保持你的頁面和編碼與你在encoding設置的一致,否則重復編碼出現亂碼.?
如果不設置它將通過System.getProperty("file.encoding"來獲取默認字符編碼。
?
PS:2.1.6版本中存在BUG,不能夠使用定義的encoding.?

b)寫一個Filter,將編碼設置為UTF-8。?
例如SetCharacterEncodingFilter。它解決Action數據傳遞時的編碼,但是不能解決屬性在Action或是Model賦值的編碼.?
c)velocity.properties文件中,添加:?
input.encoding=UTF-8?
output.encoding=UTF-8?
default.contentType=text/html;?charset=UTF-8?
它是用來設置.vm頁面的編碼方式.?

d)使用freemarker作為view層,可以再web.xml中指定字符屬性;

<servlet>
????????<servlet-name>freemarker</servlet-name>
????????<servlet-class>com.opensymphony.webwork.views.freemarker.FreemarkerServlet</servlet-class>
????????<!--?FreemarkerServlet?settings:?-->
????????<init-param>
????????????<param-name>TemplatePath</param-name>
????????????<param-value>/templates/</param-value>
????????</init-param>
????????<init-param>
????????????<param-name>NoCache</param-name>
????????????<param-value>true</param-value>
????????</init-param>
????????<init-param>
????????????<param-name>ContentType</param-name>
????????????<param-value>text/html</param-value>
????????</init-param>
???????<!--????????指定編碼?????????-->
????????<init-param>
????????????<param-name>default_encoding</param-name>
????????????<param-value>UTF-8</param-value>
????????</init-param>

????????<init-param>
????????????<param-name>number_format</param-name>
????????????<param-value>0.##########</param-value>
????????</init-param>
????????<load-on-startup>1</load-on-startup>
????</servlet>

2.WebWork表單字段驗證:?
a)Action必須繼承ActionSurport;?
b)在xwork.xml文件必須定義?
<action?name="hello"?class="test.HelloAction">?
???<result?name="success">/result.jsp</result>????
???<result?name="input">?
????????<param?value="/location">/index.jsp</param>?
???</result>???
???<interceptor-ref?name="validationWorkflowStack"/>?
</action>?
其中input?是必須定義的,另外要使用?
<param?value="location">/index.jsp</param>?
才可以在驗證錯誤后回到輸入頁面。
?
c)在Action類名-validation.xml文件必須與Action類在同一目錄下,?
d)定義的<message/>元素,當提示消息為中文時候必須在文件頭定義:?
<?xml?version="1.0"?encoding="GBK"?>?

3.WebWork的標簽的用法:?
a)需要提交的表單項name屬性值均為常量,因此均以單引號包圍,以與Model中的變量相匹配,

<ww:form?namespace="'/test'"?action="'ftltest'"?method="'POST'">
???????????????<ww:textfield?name="'msg'"?label="消息"></ww:textfield>
???????????????<ww:submit?value="/提交"?/>
????</ww:form>
b)<ww:radio/>和<ww:select/>標簽中的list的屬性可以使用Map類型,以key和value對應listKey,listValue屬性.

第一種寫法:

<ww:select?label="'Months'"?
????????name="'months'"?
????????????list="#{'01':'Jan',?'02':'Feb',?[]}"?
????????value="/01"
????????required="true"?
/>

第二種寫法:

<ww:select?label="'Pets'"?
????????name="'petIds'"?
????????list="petDao.pets"?
????????listKey="id"?
????????listValue="name"?
????????multiple="true"?
????????size="3"?
????????required="true"?
/>

<!--petDao.pets為普通對象,使用其id為KEY,name為value-->
<!--如果petDao.pets為Map類型,則可省略listKey和listValue屬性-->

c)WebWork2中的UI標簽的模板定制,可以在webwork.properties文件中指定相關屬性,并且定制模板文件;

webwork.ui.theme=xhtml?????//可用的theme還有simple;
webwork.ui.templateDir=template????//模板路徑;
#sets?the?default?template?type.?Either?vm?or?jsp
webwork.ui.templateSuffix=vm???//模板類型,還支持JSP模板,開發可以使用FreeMarker定制模板;


4.WebWork的國際化使用:?
a)<ww:i18?name="'message'">?
????????<ww:text?name="'key'"/>?
??</ww:i18>?
使用message_zh_CN.properties中包含key=****;?

b)在Action中的getText()方法資源來自Action的類名.properties

c)在Action中可以使用getTexts()獲得具體的ResourceBundle;

d)在view層一樣可以使用getText()方法;


????????<ww:i18n?name="'messages'">
????????????<!--在messages.properties文件中有key->index_msg-->????????
????????????????<ww property?value="getText('index_msg')"/>
????????</ww:i18n>

☆℡齊 2007-03-19 11:18 發表評論
]]>
身份證驗證http://m.tkk7.com/liuquanqi/archive/2007/03/19/104689.html☆℡齊☆℡齊Mon, 19 Mar 2007 03:10:00 GMThttp://m.tkk7.com/liuquanqi/archive/2007/03/19/104689.htmlhttp://m.tkk7.com/liuquanqi/comments/104689.htmlhttp://m.tkk7.com/liuquanqi/archive/2007/03/19/104689.html#Feedback2http://m.tkk7.com/liuquanqi/comments/commentRss/104689.htmlhttp://m.tkk7.com/liuquanqi/services/trackbacks/104689.html/**
?身份證
?**/

function checkIdcard(idcard){
var Errors=new Array(
"true",
"身份證號碼位數不對!",
"身份證號碼出生日期超出范圍或含有非法字符!",
"身份證號碼校驗錯誤!",
"身份證地區非法!"
);
var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",21:"遼寧",22:"吉林",23:"黑龍江",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"云南",54:"西藏",61:"陜西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"}

var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
//地區檢驗
if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];
//身份號碼位數及格式檢驗
switch(idcard.length){
case 15:
if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//測試出生日期的合法性
} else {
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//測試出生日期的合法性
}
if(ereg.test(idcard)) return Errors[0];
else return Errors[2];
break;
case 18:
//18位身份號碼檢測
//出生日期的合法性檢查
//閏年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//閏年出生日期的合法性正則表達式
} else {
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正則表達式
}
if(ereg.test(idcard)){//測試出生日期的合法性
//計算校驗位
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
+ parseInt(idcard_array[7]) * 1
+ parseInt(idcard_array[8]) * 6
+ parseInt(idcard_array[9]) * 3 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);//判斷校驗位

ZJJYW = idcard_array[17].toUpperCase();
if(M == ZJJYW) return Errors[0]; //檢測ID的校驗位
else return Errors[3];
}
else return Errors[2];
break;
default:
return Errors[1];
break;
}

}



☆℡齊 2007-03-19 11:10 發表評論
]]>
主站蜘蛛池模板: 国产免费资源高清小视频在线观看| 57PAO成人国产永久免费视频| 国产精品久久香蕉免费播放| 亚洲区视频在线观看| 久久久久免费看黄a级试看| 国产V亚洲V天堂无码| 国产在线观a免费观看| 国产中文在线亚洲精品官网| 免费大片av手机看片| 免费A级毛片无码A∨男男| 免费又黄又爽又猛大片午夜 | 国产成人无码免费看片软件 | 亚洲AV无码不卡在线播放| 暖暖免费日本在线中文| 国产免费无遮挡精品视频| 亚洲色欲色欲www在线播放| 成人免费毛片内射美女APP| 亚洲午夜精品久久久久久app| 韩国18福利视频免费观看| 亚洲人成人伊人成综合网无码| 国产网站在线免费观看| 特级aaaaaaaaa毛片免费视频| 中文字幕亚洲激情| 久久免费国产精品| 亚洲人成在线播放网站岛国| 久久免费看黄a级毛片| 狠狠色香婷婷久久亚洲精品| 手机看片久久国产免费| 中文字幕不卡免费视频| 亚洲精品国产福利在线观看| 成人男女网18免费视频| 免费一级毛片在线播放放视频 | 免费一级毛片在线播放放视频| 国产亚洲美女精品久久久| 久久免费国产视频| 亚洲人成人网毛片在线播放| 亚洲另类少妇17p| 18禁黄网站禁片免费观看不卡| 18禁亚洲深夜福利人口| 亚洲中文字幕无码久久2017| 很黄很色很刺激的视频免费|