2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  目錄</b></p><p>  1 緒論··························

2、3;·································1</p><p&g

3、t;  課題內(nèi)容與要求···································

4、;···········1</p><p>  需求分析·····················

5、;·······························1</p><p>  1.3操作環(huán)境&#

6、183;····································

7、················1</p><p>  2 功能實(shí)現(xiàn)設(shè)計(jì)···············&

8、#183;····································

9、;2</p><p>  2.1總體設(shè)計(jì)·······························&#

10、183;·····················2</p><p>  2.1.1程序設(shè)計(jì)組成框圖·········

11、;·······························2</p><p>  2.1.2數(shù)據(jù)流圖

12、····································

13、3;···········2</p><p>  2.2詳細(xì)設(shè)計(jì)····················&

14、#183;································3</p><p> 

15、 2.2.1存放信息設(shè)計(jì)··································

16、3;········4</p><p>  2.2.2構(gòu)造函數(shù)設(shè)計(jì)······················

17、83;····················4</p><p>  2.2.3判斷信息是否正確··········

18、·····························9</p><p>  2.2.4新舊身份證號轉(zhuǎn)換·

19、83;····································1

20、3</p><p>  2.2.5窗口類的創(chuàng)建及實(shí)現(xiàn)······························&#

21、183;·····13</p><p>  3 運(yùn)行結(jié)果·························

22、3;······························14</p><p>  4 總結(jié)·&#

23、183;····································

24、······················16 參考文獻(xiàn)·············&#

25、183;····································

26、·········17</p><p>  附錄·······················&

27、#183;····································

28、;···18</p><p><b>  1 緒論</b></p><p>  1.1 課題內(nèi)容與要求</p><p><b>  課題內(nèi)容</b></p><p>  身份證第18位(校驗(yàn)碼)的計(jì)算方法:</p><p> ?。?)將前面的身

29、份證號碼17位分別乘以不同的系數(shù):</p><p>  從第一位到第十七位的系數(shù)分別為:</p><p>  7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2;</p><p> ?。?)將這17位數(shù)字和系數(shù)相乘的結(jié)果相加;</p><p> ?。?)用加出來和除以11,得余數(shù);</p><p>

30、 ?。?)余數(shù)0-1-2-3-4-5-6-7-8-9-10</p><p>  對應(yīng)的最后一位身份證號碼為1-0-X-9-8-7-6-5-4-3-2;</p><p>  身份證號碼的第七位到十四位為出生年月日,應(yīng)符合現(xiàn)實(shí);</p><p><b>  課題要求</b></p><p>  (1)使用java語言完成本課

31、題的程序設(shè)計(jì),并具有一定的深度和難度;</p><p>  (2)結(jié)構(gòu)化程序設(shè)計(jì),源程序要有適當(dāng)?shù)淖⑨專钩绦蛉菀组喿x;</p><p>  (3)能先對問題進(jìn)行分析然后進(jìn)行設(shè)計(jì)最后進(jìn)行編碼的原則。每一步都要有文檔產(chǎn)生;</p><p>  (4)程序一定要做必要的測試和分析,必須得到合理結(jié)果;</p><p> ?。?)可適當(dāng)添加功能,讓程

32、序更具有實(shí)用性。</p><p> ?。?)提交的所有材料必須符合《長沙理工大學(xué)課程設(shè)計(jì)管理規(guī)定》(長理工大[2005]8號)的要求。</p><p><b>  1.2 需求分析</b></p><p>  本課題主要目的是為了設(shè)計(jì)一套程序來驗(yàn)證給出的身份證號是否正確,如若正確將身份證號所體現(xiàn)的關(guān)鍵信息性別,年齡,出生日期展現(xiàn)給用戶,同時考

33、慮到實(shí)實(shí)際情況給出了十五位身份證號轉(zhuǎn)十八位,以及十八位轉(zhuǎn)十五位的算法, 從而給相關(guān)部門機(jī)構(gòu)帶來方便。</p><p>  1.3 操作環(huán)境 </p><p>  MyEclipse 8.5 </p><p><b>  2 功能實(shí)現(xiàn)設(shè)計(jì)</b></p><p><b>  2.1 總體設(shè)計(jì)</b&g

34、t;</p><p>  根據(jù)上面的分析,將系統(tǒng)分為幾大部分:判斷身份證號的位數(shù)以及每一位是否正確,判斷出生年月是否符合實(shí)際,根據(jù)算法運(yùn)算對比校驗(yàn)碼是否正確,新舊身份證號轉(zhuǎn)換,提取輸出關(guān)鍵信息。</p><p>  2.1.1 程序設(shè)計(jì)組成框圖</p><p>  2.1.2 數(shù)據(jù)流圖</p><p><b>  N</b&g

35、t;</p><p><b>  Y</b></p><p>  N Y</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b&

36、gt;</p><p><b>  Y</b></p><p><b>  2.2 詳細(xì)設(shè)計(jì)</b></p><p>  2.2.1存放信息設(shè)計(jì)</p><p>  導(dǎo)包,定義一個接口類用于其他類實(shí)現(xiàn),定義個身份證類用于實(shí)現(xiàn)接口,定義存放年份,月份,天數(shù),性別,年齡,校驗(yàn)碼對應(yīng)表,校驗(yàn)碼,身份證號碼

37、,錯誤標(biāo)識的容器。</p><p>  //定義一個接口用于其它類實(shí)現(xiàn)</p><p>  interface IdCardInterFace {</p><p>  int digitCheck (final String id);//位數(shù)檢查</p><p>  boolean charCheck ();//字符檢查</p>

38、<p>  boolean dateCheck ();//日期檢查</p><p>  boolean efficacyCode ();//效驗(yàn)碼檢查</p><p><b>  }</b></p><p>  //定義個身份證類用于實(shí)現(xiàn)接口IdCardInterFace</p><p>  class Id

39、Card implements IdCardInterFace {</p><p>  public final static int systemTime = new GregorianCalendar ().get(Calendar.YEAR);//取得當(dāng)前系統(tǒng)年份</p><p>  protected int year;//用于存放年份</p><p>  

40、protected int month;//用于存放月份</p><p>  protected int date;//用于存放日期天數(shù)</p><p>  protected String sex;//用于存放性別</p><p>  protected int age;//用于存放年齡</p><p>  protected HashMa

41、p <Integer, String>remainGroup;//存放效驗(yàn)碼值對應(yīng)表</p><p>  private int remainder;//存放效驗(yàn)碼</p><p>  private int totals;//存放每一位字符值與它所對應(yīng)的加權(quán)因子的乘積的和</p><p>  protected String id;//存放身份證號碼&

42、lt;/p><p>  private static int DATE_SIGN;//存放日期錯誤標(biāo)志</p><p>  2.2.2 構(gòu)造函數(shù)設(shè)計(jì)</p><p>  之后定義構(gòu)造函數(shù),檢查各項(xiàng)的正確性。特別是二月的檢查,要區(qū)分平年和閏年 ,平年二月日期到28號,閏年為29號。構(gòu)造計(jì)算校驗(yàn)碼的函數(shù),運(yùn)用java語言的運(yùn)算規(guī)則,按照給出的校驗(yàn)碼計(jì)算規(guī)則計(jì)算校驗(yàn)碼。<

43、;/p><p><b>  //定義構(gòu)造函數(shù)</b></p><p>  public IdCard (){</p><p><b>  }</b></p><p>  public IdCard (String id){</p><p>  this.id = id;</

44、p><p>  //用于存放效驗(yàn)碼對應(yīng)表</p><p>  remainGroup = new HashMap <Integer ,String>();</p><p>  remainGroup.put (0, "1");</p><p>  remainGroup.put (1, "0")

45、;</p><p>  remainGroup.put (2, "X");</p><p>  remainGroup.put (3, "9");</p><p>  remainGroup.put (4, "8");</p><p>  remainGroup.put (5, &q

46、uot;7");</p><p>  remainGroup.put (6, "6");</p><p>  remainGroup.put (7, "5");</p><p>  remainGroup.put (8, "4");</p><p>  remainGrou

47、p.put (9, "3");</p><p>  remainGroup.put (10, "2");</p><p><b>  }</b></p><p>  //檢查位數(shù)的正確性</p><p>  public int digitCheck (final String i

48、d){</p><p>  if (id.length () == 18){</p><p>  return 18;</p><p>  }else if (id.length () == 15){</p><p>  return 15;</p><p><b>  }else{</b><

49、;/p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //檢查每一位的正確性</p><p>  public boolean charCheck (){&

50、lt;/p><p>  if (id.length () == 17){</p><p>  Pattern p = Pattern.compile ("[0-9]{17}");</p><p>  Matcher m = p.matcher (id);</p><p>  return m.matches ();</p

51、><p>  }else if (id.length () == 18){</p><p>  String str = id.substring (0, id.length () - 1);</p><p>  String str1 = id.substring (id.length () - 1, id.length ());</p><p&g

52、t;  Pattern p = Pattern.compile ("[0-9]{17}");</p><p>  Matcher m = p.matcher (str);</p><p>  if ((str1.matches ("\\d") || str1.equals ("X")) && m.matches (

53、)){</p><p>  return true;</p><p><b>  }else{</b></p><p>  return false;</p><p><b>  }</b></p><p><b>  }else{</b></p&

54、gt;<p>  Pattern p = Pattern.compile ("[0-9]{1,18}");</p><p>  Matcher m = p.matcher (id);</p><p>  return m.matches ();</p><p><b>  }</b></p>&l

55、t;p><b>  }</b></p><p>  //檢查日期的正確性</p><p>  public boolean dateCheck (){</p><p>  year = Integer.parseInt (id.substring (6, 10));//取得年份</p><p>  //判斷年份的正

56、確性</p><p>  if (year < 1900 || year > IdCard.systemTime - 18){</p><p>  DATE_SIGN = 1;</p><p>  return false;</p><p><b>  }else</b></p><p&g

57、t;<b>  {</b></p><p>  month = Integer.parseInt (id.substring (10, 12));//取得月份</p><p>  //判斷月份的正確性</p><p>  if (month <= 12){</p><p>  //判斷天數(shù)的正確性</p>

58、;<p>  date = Integer.parseInt (id.substring (12, 14));//取得天數(shù)</p><p>  if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))//判斷是否為閏年</p><p><b>  {</b></p>

59、<p>  //判斷二月份的天數(shù)正確性</p><p>  if (month == 2){</p><p>  if (date <= 29){</p><p>  return true;</p><p><b>  }else{</b></p><p>  DATE_SIG

60、N = 3;</p><p>  return false;</p><p><b>  }</b></p><p><b>  }else{</b></p><p>  //判斷其它月份的天數(shù)正確性</p><p>  if ((month < 8 &&

61、; month % 2 != 0 && date <= 31) || (month < 8 && month % 2 == 0 && date <= 30)){</p><p>  return true;</p><p>  }else if ((month >= 8 && month % 2 ==

62、0 && date <= 31) || (month >= 8 && month % 2 != 0 && date <= 30)){</p><p>  return true;</p><p><b>  }else{</b></p><p>  DATE_SIGN = 3;&

63、lt;/p><p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //判斷平年的正確性</p><p>&l

64、t;b>  else{</b></p><p>  //判斷二月的天數(shù)正確性</p><p>  if (month == 2){</p><p>  if (date <= 28){</p><p>  return true;</p><p><b>  }else{</b&

65、gt;</p><p>  DATE_SIGN = 3;</p><p>  return false;</p><p><b>  }</b></p><p><b>  }else{</b></p><p>  //判斷其它月份的天數(shù)正確性</p><

66、p>  if ((month < 8 && month % 2 != 0 && date <= 31) || (month < 8 && month % 2 == 0 && date <= 30)){</p><p>  return true;</p><p>  }else if ((mont

67、h >= 8 && month % 2 == 0 && date <= 31) || (month >= 8 && month % 2 != 0 && date <= 30)){</p><p>  return true;</p><p><b>  }else{</b><

68、/p><p>  DATE_SIGN = 3;</p><p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>&

69、lt;b>  }else{</b></p><p>  DATE_SIGN = 2;</p><p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p><p>  }// end of d

70、ateCheck</p><p><b>  //}</b></p><p><b>  //計(jì)算效驗(yàn)碼</b></p><p>  public int computeEfficacyCode (){</p><p>  if (id.length () == 18){</p>&l

71、t;p>  for (int i = id.length (); i > 1; i--){</p><p>  int ai = Integer.parseInt (id.substring (18-i, 19-i));</p><p>  int wi = (int)Math.pow (2, i-1) % 11;</p><p>  totals =

72、totals + ai * wi;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  for (int i = id.length () + 1; i > 1; i--){&

73、lt;/p><p>  int ai = Integer.parseInt (id.substring (18-i, 19-i));</p><p>  int wi = (int)Math.pow (2, i-1) % 11;</p><p>  totals = totals + ai * wi;</p><p><b>  }&l

74、t;/b></p><p><b>  }</b></p><p>  remainder = totals % 11;</p><p>  return remainder;</p><p><b>  }</b></p><p>  2.2.3 判斷信息是否正確&l

75、t;/p><p>  對于給定的身份證號,通過調(diào)用前面的構(gòu)造函數(shù),來驗(yàn)證各方面信息是否正確,出生年月日是否符合實(shí)際,特別是平年閏年二月的判定,性別的判定,以及由前17位計(jì)算出的校驗(yàn)碼是否和身份證號的第十八位的匹配。判定過程中運(yùn)用了很多循環(huán)語句,對于錯誤運(yùn)用java的異常處理。</p><p>  //檢查日期的正確性</p><p>  public boolean d

76、ateCheck (){</p><p>  year = Integer.parseInt (id.substring (6, 10));//取得年份</p><p>  //判斷年份的正確性</p><p>  if (year < 1900 || year > IdCard.systemTime - 18){</p><p>

77、;  DATE_SIGN = 1;</p><p>  return false;</p><p><b>  }else</b></p><p><b>  {</b></p><p>  month = Integer.parseInt (id.substring (10, 12));//取得月

78、份</p><p>  //判斷月份的正確性</p><p>  if (month <= 12){</p><p>  //判斷天數(shù)的正確性</p><p>  date = Integer.parseInt (id.substring (12, 14));//取得天數(shù)</p><p>  if (year %

79、 4 == 0 && (year % 100 != 0 || year % 400 == 0))//判斷是否為閏年</p><p><b>  {</b></p><p>  //判斷二月份的天數(shù)正確性</p><p>  if (month == 2){</p><p>  if (date <=

80、 29){</p><p>  return true;</p><p><b>  }else{</b></p><p>  DATE_SIGN = 3;</p><p>  return false;</p><p><b>  }</b></p><

81、p><b>  }else{</b></p><p>  //判斷其它月份的天數(shù)正確性</p><p>  if ((month < 8 && month % 2 != 0 && date <= 31) || (month < 8 && month % 2 == 0 && date

82、 <= 30)){</p><p>  return true;</p><p>  }else if ((month >= 8 && month % 2 == 0 && date <= 31) || (month >= 8 && month % 2 != 0 && date <= 30)){&l

83、t;/p><p>  return true;</p><p><b>  }else{</b></p><p>  DATE_SIGN = 3;</p><p>  return false;</p><p><b>  }</b></p><p>&l

84、t;b>  }</b></p><p><b>  }</b></p><p>  //判斷平年的正確性</p><p><b>  else{</b></p><p>  //判斷二月的天數(shù)正確性</p><p>  if (month == 2){<

85、;/p><p>  if (date <= 28){</p><p>  return true;</p><p><b>  }else{</b></p><p>  DATE_SIGN = 3;</p><p>  return false;</p><p><

86、b>  }</b></p><p><b>  }else{</b></p><p>  //判斷其它月份的天數(shù)正確性</p><p>  if ((month < 8 && month % 2 != 0 && date <= 31) || (month < 8 &&a

87、mp; month % 2 == 0 && date <= 30)){</p><p>  return true;</p><p>  }else if ((month >= 8 && month % 2 == 0 && date <= 31) || (month >= 8 && month % 2

88、!= 0 && date <= 30)){</p><p>  return true;</p><p><b>  }else{</b></p><p>  DATE_SIGN = 3;</p><p>  return false;</p><p><b>  

89、}</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }else{</b></p><p>  DATE_SIGN = 2;</p><p>  return false;&l

90、t;/p><p><b>  }</b></p><p><b>  }</b></p><p>  }// end of dateCheck</p><p><b>  //}</b></p><p><b>  //計(jì)算效驗(yàn)碼</b>

91、;</p><p>  public int computeEfficacyCode (){</p><p>  if (id.length () == 18){</p><p>  for (int i = id.length (); i > 1; i--){</p><p>  int ai = Integer.parseInt (

92、id.substring (18-i, 19-i));</p><p>  int wi = (int)Math.pow (2, i-1) % 11;</p><p>  totals = totals + ai * wi;</p><p><b>  }</b></p><p><b>  }</b&g

93、t;</p><p><b>  else{</b></p><p>  for (int i = id.length () + 1; i > 1; i--){</p><p>  int ai = Integer.parseInt (id.substring (18-i, 19-i));</p><p>  in

94、t wi = (int)Math.pow (2, i-1) % 11;</p><p>  totals = totals + ai * wi;</p><p><b>  }</b></p><p><b>  }</b></p><p>  remainder = totals % 11;<

95、;/p><p>  return remainder;</p><p><b>  }</b></p><p>  2.2.4 新舊身份證號轉(zhuǎn)換</p><p>  考慮到現(xiàn)在還確實(shí)存在一些舊身份證,特設(shè)計(jì)了此模塊用于新舊身份證的轉(zhuǎn)換。按照新舊身份證的轉(zhuǎn)換規(guī)則,進(jìn)行新舊身份證號的轉(zhuǎn)換。</p><p>

96、;  //定義一個NewIdCard類用于進(jìn)行新身份證號碼的操作</p><p>  class NewIdCard extends IdCard{</p><p>  public String newId;</p><p>  public StringBuffer oldId;</p><p>  public NewIdCard (S

97、tring newId){</p><p>  super (newId);</p><p>  this.newId = newId;</p><p><b>  }</b></p><p>  //用于將新身份證號碼轉(zhuǎn)換成舊身份證號碼</p><p>  public void newToOl

98、dIdCard (){</p><p>  oldId = new StringBuffer (newId);</p><p>  oldId = oldId.delete (6, 8);</p><p>  oldId = new StringBuffer (oldId.substring (0, oldId.length () - 1));</p>

99、<p><b>  }</b></p><p><b>  }</b></p><p>  2.2.5 窗口類的創(chuàng)建及實(shí)現(xiàn)</p><p>  為了方便用戶使用該套程序,創(chuàng)建一個窗口類,便于輸入和直觀的將結(jié)果展現(xiàn)用戶眼前。創(chuàng)建窗口類過程中主要是用到了java的組件的相關(guān)功能,同時還有事件處理機(jī)制,用于鼠標(biāo)和鍵盤

100、的輸入處理。關(guān)鍵程序如下</p><p><b>  //定義個窗口類</b></p><p>  class IdCardGui extends Frame{</p><p>  public Label lb = new Label ();</p><p>  public JDialog dialog;</p

101、><p>  public static String strError = null;</p><p>  private String id;</p><p><b>  //初使化對文本框</b></p><p>  public JTextField tf1;</p><p>  public

102、 JTextField tf2 = new JTextField ("", 23);</p><p>  public JTextField tf3 = new JTextField ("", 23);</p><p>  public JTextField tf4 = new JTextField ("", 23);</p

103、><p>  public JTextField tf5 = new JTextField ("", 23);</p><p>  public JTextField tf6 = new JTextField ("", 23);</p><p>  JButton bt = new JButton ("查詢")

104、;</p><p><b>  3 運(yùn)行結(jié)果</b></p><p>  圖3.1 顯示主菜單</p><p>  圖3.2 位數(shù)輸入錯誤</p><p>  圖3.3 檢查每一位是否正確</p><p>  圖3.4 月份對應(yīng)日期有誤(平年二月無29日)</p><p>

105、  圖3.5 校驗(yàn)碼有誤</p><p>  圖3.6最終正確運(yùn)行界面</p><p><b>  4 總結(jié)</b></p><p>  本次課程設(shè)計(jì)不僅完成了題目要的要求,而且實(shí)現(xiàn)了程序的普遍化,能夠適應(yīng)更普遍的情況,而且考慮到實(shí)際情況,添加了自己的創(chuàng)新模塊,進(jìn)行十八位十五位互轉(zhuǎn),在此程序設(shè)計(jì)過程中用到了java的很多知識,接口,數(shù)組,循環(huán)語

106、句,容器,異常處理,同時也注意到了代碼的優(yōu)化,針對好多問題進(jìn)行最優(yōu)化處理,讓代碼在通俗易懂的情況下更加簡潔。但是程序還是存在一些問題,本來想要將身份證所代表的地區(qū)加進(jìn)去,但是由于地區(qū)牽扯到的鏈接過于復(fù)雜,我就放棄了這個想法,但是我認(rèn)為隨著我技術(shù)的進(jìn)步,這個問題會在不久的將來得到解決。</p><p>  通過這次課程設(shè)計(jì),我對java有了更深層次的理解,同時也對java有了更濃厚的興趣,正應(yīng)了那句話, 一切程序都

107、源于生活,一切程序都服務(wù)生活,編代碼寫程序也是為了給人們的生活帶來方便。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 印旻. Java與面向?qū)ο蟪绦蛟O(shè)計(jì)教程.北京:高等教育出版社,1999</p><p>  [2] 張利國,劉偉. Java SE.北京:科學(xué)出版社,2008</p><p>

108、;  [3] (美)昊斯特曼(Horstmann,C.S.).Java核心技術(shù).北京:機(jī)械工程出版社,2008,5</p><p>  [4] (美)埃克爾 著,陳昊鵬 譯. Java編程思想(第4版).北京:機(jī)械工業(yè)出版社,2007,6</p><p>  [5] 李興華. Java開發(fā)實(shí)戰(zhàn)經(jīng)典.北京:清華大學(xué)出版社,2009,8</p><p><b>

109、;  附錄 源程序清單</b></p><p>  package kechengsheji0;</p><p>  import java.util.*;</p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p><p>  i

110、mport javax.swing.*;</p><p>  import java.util.regex.*;</p><p>  import javax.swing.text.*;</p><p>  //定義一個接口用于其它類實(shí)現(xiàn)</p><p>  interface IdCardInterFace {</p><

111、;p>  int digitCheck (final String id);//位數(shù)檢查</p><p>  boolean charCheck ();//字符檢查</p><p>  boolean dateCheck ();//日期檢查</p><p>  boolean efficacyCode ();//效驗(yàn)碼檢查</p><p&g

112、t;<b>  }</b></p><p>  //定義個身份證類用于實(shí)現(xiàn)接口IdCardInterFace</p><p>  class IdCard implements IdCardInterFace {</p><p>  public final static int systemTime = new GregorianCalend

113、ar ().get(Calendar.YEAR);//取得當(dāng)前系統(tǒng)年份</p><p>  protected int year;//用于存放年份</p><p>  protected int month;//用于存放月份</p><p>  protected int date;//用于存放日期天數(shù)</p><p>  protected

114、 String sex;//用于存放性別</p><p>  protected int age;//用于存放年齡</p><p>  protected HashMap <Integer, String>remainGroup;//存放效驗(yàn)碼值對應(yīng)表</p><p>  private int remainder;//存放效驗(yàn)碼</p>

115、<p>  private int totals;//存放每一位字符值與它所對應(yīng)的加權(quán)因子的乘積的和</p><p>  protected String id;//存放身份證號碼</p><p>  private static int DATE_SIGN;//存放日期錯誤標(biāo)志</p><p><b>  //定義構(gòu)造函數(shù)</b>&

116、lt;/p><p>  public IdCard (){</p><p><b>  }</b></p><p>  public IdCard (String id){</p><p>  this.id = id;</p><p>  //用于存放效驗(yàn)碼對應(yīng)表</p><p&

117、gt;  remainGroup = new HashMap <Integer ,String>();</p><p>  remainGroup.put (0, "1");</p><p>  remainGroup.put (1, "0");</p><p>  remainGroup.put (2, &quo

118、t;X");</p><p>  remainGroup.put (3, "9");</p><p>  remainGroup.put (4, "8");</p><p>  remainGroup.put (5, "7");</p><p>  remainGroup.

119、put (6, "6");</p><p>  remainGroup.put (7, "5");</p><p>  remainGroup.put (8, "4");</p><p>  remainGroup.put (9, "3");</p><p>  

120、remainGroup.put (10, "2");</p><p><b>  }</b></p><p>  //檢查位數(shù)的正確性</p><p>  public int digitCheck (final String id){</p><p>  if (id.length () == 18

121、){</p><p>  return 18;</p><p>  }else if (id.length () == 15){</p><p>  return 15;</p><p><b>  }else{</b></p><p><b>  return 0;</b>

122、</p><p><b>  }</b></p><p><b>  }</b></p><p>  //檢查每一位的正確性</p><p>  public boolean charCheck (){</p><p>  if (id.length () == 17){&l

123、t;/p><p>  Pattern p = Pattern.compile ("[0-9]{17}");</p><p>  Matcher m = p.matcher (id);</p><p>  return m.matches ();</p><p>  }else if (id.length () == 18){&

124、lt;/p><p>  String str = id.substring (0, id.length () - 1);</p><p>  String str1 = id.substring (id.length () - 1, id.length ());</p><p>  Pattern p = Pattern.compile ("[0-9]{17}

125、");</p><p>  Matcher m = p.matcher (str);</p><p>  if ((str1.matches ("\\d") || str1.equals ("X")) && m.matches ()){</p><p>  return true;</p>

126、<p><b>  }else{</b></p><p>  return false;</p><p><b>  }</b></p><p><b>  }else{</b></p><p>  Pattern p = Pattern.compile (&qu

127、ot;[0-9]{1,18}");</p><p>  Matcher m = p.matcher (id);</p><p>  return m.matches ();</p><p><b>  }</b></p><p><b>  }</b></p><p&g

128、t;  //檢查日期的正確性</p><p>  public boolean dateCheck (){</p><p>  year = Integer.parseInt (id.substring (6, 10));//取得年份</p><p>  //判斷年份的正確性</p><p>  if (year < 1900 || y

129、ear > IdCard.systemTime - 18){</p><p>  DATE_SIGN = 1;</p><p>  return false;</p><p><b>  }else</b></p><p><b>  {</b></p><p>  m

130、onth = Integer.parseInt (id.substring (10, 12));//取得月份</p><p>  //判斷月份的正確性</p><p>  if (month <= 12){</p><p>  //判斷天數(shù)的正確性</p><p>  date = Integer.parseInt (id.substr

131、ing (12, 14));//取得天數(shù)</p><p>  if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))//判斷是否為閏年</p><p><b>  {</b></p><p>  //判斷二月份的天數(shù)正確性</p><p>  

132、if (month == 2){</p><p>  if (date <= 29){</p><p>  return true;</p><p><b>  }else{</b></p><p>  DATE_SIGN = 3;</p><p>  return false;</p

133、><p><b>  }</b></p><p><b>  }else{</b></p><p>  //判斷其它月份的天數(shù)正確性</p><p>  if ((month < 8 && month % 2 != 0 && date <= 31) || (m

134、onth < 8 && month % 2 == 0 && date <= 30)){</p><p>  return true;</p><p>  }else if ((month >= 8 && month % 2 == 0 && date <= 31) || (month >= 8 &a

135、mp;& month % 2 != 0 && date <= 30)){</p><p>  return true;</p><p><b>  }else{</b></p><p>  DATE_SIGN = 3;</p><p>  return false;</p>&

136、lt;p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //判斷平年的正確性</p><p><b>  else{</b></p><p>  /

137、/判斷二月的天數(shù)正確性</p><p>  if (month == 2){</p><p>  if (date <= 28){</p><p>  return true;</p><p><b>  }else{</b></p><p>  DATE_SIGN = 3;</p&g

138、t;<p>  return false;</p><p><b>  }</b></p><p><b>  }else{</b></p><p>  //判斷其它月份的天數(shù)正確性</p><p>  if ((month < 8 && month % 2 !=

139、 0 && date <= 31) || (month < 8 && month % 2 == 0 && date <= 30)){</p><p>  return true;</p><p>  }else if ((month >= 8 && month % 2 == 0 && d

140、ate <= 31) || (month >= 8 && month % 2 != 0 && date <= 30)){</p><p>  return true;</p><p><b>  }else{</b></p><p>  DATE_SIGN = 3;</p><

141、;p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }else{</b></p><p> 

142、 DATE_SIGN = 2;</p><p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p><p>  }// end of dateCheck</p><p><b>  //}</

143、b></p><p><b>  //計(jì)算效驗(yàn)碼</b></p><p>  public int computeEfficacyCode (){</p><p>  if (id.length () == 18){</p><p>  for (int i = id.length (); i > 1; i-

144、-){</p><p>  int ai = Integer.parseInt (id.substring (18-i, 19-i));</p><p>  int wi = (int)Math.pow (2, i-1) % 11;</p><p>  totals = totals + ai * wi;</p><p><b> 

145、 }</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  for (int i = id.length () + 1; i > 1; i--){</p><p>  int ai = Integer.parseInt

146、(id.substring (18-i, 19-i));</p><p>  int wi = (int)Math.pow (2, i-1) % 11;</p><p>  totals = totals + ai * wi;</p><p><b>  }</b></p><p><b>  }</b&

147、gt;</p><p>  remainder = totals % 11;</p><p>  return remainder;</p><p><b>  }</b></p><p>  //判斷效驗(yàn)碼的正確性</p><p>  public boolean efficacyCode ()

148、{</p><p>  this.computeEfficacyCode ();</p><p>  if (id.substring (id.length () - 1 , id.length ()).equals (remainGroup.get (remainder))){</p><p>  return true;</p><p>

149、<b>  }else{</b></p><p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //判斷身份證號碼的正確性</p><p>  public boole

150、an idJudge (){</p><p>  boolean b;</p><p>  String str;</p><p>  b = charCheck ();//進(jìn)行每一位檢查</p><p><b>  if (b){</b></p><p>  b = dateCheck ();/

151、/進(jìn)行日期檢查</p><p><b>  if (b){</b></p><p>  if (id.length () == 18){</p><p>  b = efficacyCode ();//進(jìn)行效驗(yàn)碼判斷</p><p><b>  if (b){</b></p><

152、p>  return true;</p><p><b>  }else{</b></p><p>  IdCardGui.strError = "效驗(yàn)碼有誤(最后一位),請重新輸入!";</p><p><b>  }</b></p><p><b>  }el

153、se{</b></p><p>  return true;</p><p><b>  }</b></p><p><b>  }else{</b></p><p>  switch (DATE_SIGN){</p><p><b>  case 1

154、:</b></p><p>  IdCardGui.strError = "年份輸入有誤(1900~ " + (IdCard.systemTime - 16) + "),請重新輸入!";</p><p><b>  break;</b></p><p><b>  case 2 :&

155、lt;/b></p><p>  IdCardGui.strError = "月分輸入有誤(1~12),請重新輸入!";</p><p><b>  break;</b></p><p><b>  case 3 :</b></p><p>  IdCardGui.strE

156、rror = month + "月所在的天數(shù)有誤,請重新輸入!";</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }else{</

157、b></p><p>  IdCardGui.strError = "含有特殊字符, 請重新輸入!";</p><p><b>  }</b></p><p><b>  return b;</b></p><p><b>  }</b></p&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論