身份證轉換工具類(Java)
工作中經常涉及到對身份證資訊進行關操作的演算法,特此整理出來分享。
- 15位的身份證號碼轉換成18位
- 18位的身份證號碼轉換成15位
- 傳入18位的身份證號,得到生日
- 根據身份證號碼獲取年齡
- 傳入身份證號,得到性別
- 傳入身份證號,獲取出生年份
- 判斷輸入的身份證號碼是否符合身份證號的要求
package com.test; import java.util.Calendar; /** * 身份證轉換工具類 * * <P> * 第十八位數字的計算方法為: * </P> * <P> * 1.將前面的身份證號碼17位數分別乘以不同的係數。從第一位到第十七位的係數分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2; * 2.將這17位數字和係數相乘的結果相加; 3.用加出來和除以11,看餘數是多少? 4餘數只可能有0 1 2 3 4 5 6 7 8 9 * 10這11個數字。其分別對應的最後一位身份證的號碼為1 0 X 9 8 7 6 5 4 3 2; * 5.通過上面得知如果餘數是2,就會在身份證的第18位數字上出現羅馬數字的Ⅹ。如果餘數是10,身份證的最後一位號碼就是2。 * </P> */ public class IDCardUtil { /** * 15位的身份證號碼轉換成18位 * @param idCardNo15 待轉換的 15 位身份證號碼 * @return */ public static String from15to18(String idCardNo) { String finalID = null;// 最終的ID if (!isIdCardNo(idCardNo)) throw new IllegalArgumentException("您輸入的身份證號碼不正確:" + idCardNo); String century = "19"; if (idCardNo.length() == 18) { finalID = idCardNo; } else { // 對應的17位的各個係數 int[] weight = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; // 通過加入世紀碼, 變成 17 位的新號碼本體. String tempNo = idCardNo.substring(0, 6) + century + idCardNo.substring(6); // 下面算最後一位校驗碼 int checkSum = 0; for (int i = 0; i < weight.length; i++) { int ai = Integer.parseInt("" + tempNo.charAt(i)); // 位於 i 位置的數值 checkSum = checkSum + ai * weight[i]; } // 求餘數 int checkNum = checkSum % 11; String lastNumber = null; switch (checkNum) { case 0: lastNumber = "1"; break; case 1: lastNumber = "0"; break; case 2: lastNumber = "X"; break; case 3: lastNumber = "9"; break; case 4: lastNumber = "8"; break; case 5: lastNumber = "7"; break; case 6: lastNumber = "6"; break; case 7: lastNumber = "5"; break; case 8: lastNumber = "4"; break; case 9: lastNumber = "3"; break; case 10: lastNumber = "2"; break; } finalID = tempNo + lastNumber; } return finalID; } /** * 18位的身份證號碼轉換成15位 * @param idCardNo18 * @return */ public static String from18to15(String idCardNo18) { if (!(isIdCardNo(idCardNo18) && idCardNo18.length() == 18)) { throw new IllegalArgumentException("身份證號引數格式不正確!"); } return idCardNo18.substring(0, 6) + idCardNo18.substring(8, 17); } /** * 傳入18位的身份證號,得到生日,格式:19880101 * @param idCardNo18 * @return */ public static String getBirthday(String idCardNo18) { return idCardNo18.substring(6, 14); } /** * 根據身份證號碼獲取年齡 * @param idCardNo18 * @return */ public static int getAge(String idCardNo18) { idCardNo18 = from15to18(idCardNo18); // 當前年份 Calendar instance = Calendar.getInstance(); int currentYear = instance.get(Calendar.YEAR); int age = currentYear - Integer.parseInt(getBirthYear(idCardNo18)); return age; } /** * 傳入身份證號,得到性別 * @param idCardNo18 * @return */ public static String getSex(String idCardNo18) { idCardNo18 = from15to18(idCardNo18); // 定位到倒數第二位 char c = idCardNo18.charAt(16); String sex = ""; if (c % 2 != 0) { sex = "男"; } else { sex = "女"; } return sex; } /** * 傳入身份證號,獲取出生年份 * @param idCardNo18 * @return */ private static String getBirthYear(String idCardNo18) { return idCardNo18.substring(6, 10); } /** * 判斷輸入的身份證號碼是否符合身份證號的要求 * @param idCardNO * @return */ public static boolean isIdCardNo(String idCardNO) { boolean isID = false; if (idCardNO == null) return false; int len = idCardNO.length(); if (len != 15 && len != 18) { isID = false; } else { // 排除最後一位是:X的情況 for (int i = 0; i < len; i++) { try { if (i < len - 1) Integer.parseInt("" + idCardNO.charAt(i)); else if ((idCardNO.charAt(i) + "").equalsIgnoreCase("X") || Integer.parseInt("" + idCardNO.charAt(i)) > -1) isID = true; else isID = false; } catch (NumberFormatException e) { return false; } } } return isID; } public static void main(String[] args) { System.out.println(getSex(from15to18("110104830512301"))); } }
相關推薦
身份證轉換工具類(Java)
工作中經常涉及到對身份證資訊進行關操作的演算法,特此整理出來分享。 15位的身份證號碼轉換成18位18位的身份證號碼轉換成15位傳入18位的身份證號,得到生日根據身份證號碼獲取年齡傳入身份證號,得到性別傳入身份證號,獲取出生年份判斷輸入的身份證號碼是否符合身份證號的要求
Java時間格式轉換工具類
string stact 修改 stack time mil 日期格式轉換 pla gettime 把當前時間修改成指定時間 //把當前時間修改成指定時間 public String dateUtil(Integer seconds, String dateFo
Java中將字符串與unicode的相互轉換工具類
png style nic ava param 字符串拼接 size tostring info unicode編碼規則 unicode碼對每一個字符用4位16進制數表示。具體規則是:將一個字符(char)的高8位與低8位分別取出,轉化為16進制數,如果轉化的16進制數的長
xstream--xml工具類--java物件轉換JSONObject、xml與java物件互轉
工作環境: myeclipse2013、jdk1.8、fastjson1.1.41、xstream1.4.3 import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.Writer;
java json轉換工具類
在java專案中,通常會用到json型別的轉換,常常需要對 json字串和物件進行相互轉換。 在製作自定義的json轉換類之前,先引入以下依賴 <!--json解析工具--> <dependency> <groupId>com.fasterx
Java 資料轉換/進位制轉換 工具類
package com.yunduan.parking.util; import java.math.BigInteger; import java.util.regex.Pattern; /** * Created by Administrator on 2018/8/15. */ p
java位元組字元轉換工具類
該工具類作用是位元組,字元陣列的相互轉換(避免重複造輪子),分享給大家 public class ConvertUtil { /** * 位元組陣列轉16進位制字串 &
Java生成隨機數工具類,進位制之間的轉換工具類,獲取指定時間,時間格式轉換工具類
廢話不多說,貢獻一下code 1.編號生成工具 import org.apache.commons.lang3.StringUtils; import java.math.BigInteger; import java.text.SimpleDa
java中unicode utf-8以及漢字之間的轉換工具類
1. 漢字字串與unicode之間的轉換 1.1 stringToUnicode /** * 獲取字串的unicode編碼 * 漢字“木”的Unicode 碼點為Ox6728 * * @param s 木 * @return \uf
Java 身份證驗證工具類程式碼模板
package com.demo.common.pojo; import java.text.ParseException; import java.text.SimpleDateFormat; import java
java時間戳轉換工具類
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** *
java 中 byte[]、File、InputStream 互相轉換工具類
java 中 byte[]、File、InputStream 互相轉換1、將File、FileInputStream 轉換為byte陣列:File file = new File("test.txt");InputStream input = new FileInputSt
Java 物件和xml轉換工具類
package com.mcp.util; import org.apache.commons.lang3.StringUtils; import java.io.StringReader; import java.io.StringWriter; import j
java資料型別相互轉換工具類
package com.rest.ful.utils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /**
java 物件與json字串互相轉換工具類
需要引入的jar包: JsonUtil.java檔案: package
java時間轉換工具類
package com.ikcrm.lib.common.utils; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.ArrayList; import java
我的Android進階之旅------>Java檔案大小轉換工具類 (B,KB,MB,GB,TB,PB之間的大小轉換)
Java檔案大小轉換工具類 (B,KB,MB,GB,TB,PB之間的大小轉換) 有時候要做出如下所示的展示檔案大小的效果時候,需要對檔案大小進行轉換,然後再進行相關的程式碼邏輯編寫。 /*** * 儲存大小(單位)轉換器. */
Java 型別轉換 工具類
public class TypeCastHelper { private static final String DEFAULT_STRING = ""; private static final int DEFAULT_INT = 0; priv
Java的身份證號碼工具類
package com.pqs.common.tools; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.
利用Thumbnails,java圖片壓縮,轉換工具類
Thumbnails是谷歌的一個圖片壓縮處理開源庫。利用這個庫可以非常容易的做圖片處理。這裡整理了一些方法。直接看程式碼吧。 先新增jar支援 <!-- https://mvnrepository.com/artifact/net.coobird/thumbnail