java实行图片上写字

本文永久地址:https://my.oschina.net/bysu/blog/1510482

背景:因为测试过程中需要用到不同的某证件,于是网上找了一个某证件生成器,不过没用多久,就有其他同事的电脑被公司的安全部直接抱走,并且通报给上头领导,搞得挺严重的样子,害我赶紧把电脑弄瘫痪,让it部的同事重装系统去了(没事不给重装,只能出此下策)。既然如此,那就只能自己动手了。本来代码可以分几个类来写,但是因为涉及到后续要跟其他同事分享,多一个文件可能就多一点麻烦,所以干脆写到一起。

本来写好了,让我们测试负责人来看一下,看这样行不行,看了之后,他说我们不止是随机生成身份证号,有时候还需要指定身份证号...于是,嗒嗒嗒,又胡乱敲了一通....PS:图片的模板还请自行百度,不同的图片模板,身份证信息的位置需要手动调整。本文中所有的内容仅供学习,不做他用

IdnoPic类

import javax.imageio.ImageIO; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.net.URL; 
import java.util.Random;
import java.util.Map;
import java.util.HashMap;
import java.util.Scanner;

/** 
 * @author 苏宝伢 E-mail:by.su@qq.com 
 * @version 创建时间: 2017年8月15日 上午10:24:45
 */
public class IdnoPic {

	private Font font = new Font("华文细黑", Font.PLAIN, 18);// 添加字体的属性设置 
	   
	  private Graphics2D g = null; 
	   
	  private int fontsize = 0; 
	   
	  private int x = 0; 
	   
	  private int y = 0; 
	   
	  /**
	   * 导入本地图片到缓冲区
	   */
	  public BufferedImage loadImageLocal(String imgName) { 
	    try { 
	      return ImageIO.read(new File(imgName)); 
	    } catch (IOException e) { 
	      System.out.println(e.getMessage()); 
	    } 
	    return null; 
	  } 
	   
	  /**
	   * 导入网络图片到缓冲区
	   */
	  public BufferedImage loadImageUrl(String imgName) { 
	    try { 
	      URL url = new URL(imgName); 
	      return ImageIO.read(url); 
	    } catch (IOException e) { 
	      System.out.println(e.getMessage()); 
	    } 
	    return null; 
	  } 
	   
	  /**
	   * 生成新图片到本地
	   */
	  public void writeImageLocal(String newImage, BufferedImage img) { 
	    if (newImage != null && img != null) { 
	      try { 
	        File outputfile = new File(newImage); 
	        ImageIO.write(img, "jpg", outputfile); 
	      } catch (IOException e) { 
	        System.out.println(e.getMessage()); 
	      } 
	    } 
	  } 
	   
	  /**
	   * 设定文字的字体等
	   */
	  public void setFont(String fontStyle, int fontSize) { 
	    this.fontsize = fontSize; 
	    this.font = new Font(fontStyle, Font.BOLD, fontSize); 
	  } 
	   
	  /**
	   * 修改图片,返回修改后的图片缓冲区(只输出一行文本)
	   */
	  public BufferedImage modifyImage(BufferedImage img, Object content, int x, 
	      int y) { 
	   
	    try { 
	      int w = img.getWidth(); 
	      int h = img.getHeight(); 
	      g = img.createGraphics(); 
	      g.setBackground(Color.black); 
	      g.setColor(Color.black);//设置字体颜色 
	      if (this.font != null) 
	        g.setFont(this.font); 
	      // 验证输出位置的纵坐标和横坐标 
	      if (x >= h || y >= w) { 
	        this.x = h - this.fontsize + 2; 
	        this.y = w; 
	      } else { 
	        this.x = x; 
	        this.y = y; 
	      } 
	      if (content != null) { 
	        g.drawString(content.toString(), this.x, this.y); 
	      } 
	      g.dispose(); 
	    } catch (Exception e) { 
	      System.out.println(e.getMessage()); 
	    } 
	   
	    return img; 
	  } 
	   
	  /**
	   * 修改图片,返回修改后的图片缓冲区(输出多个文本段) xory:true表示将内容在一行中输出;false表示将内容多行输出
	   */
	  public BufferedImage modifyImage(BufferedImage img, Object[] contentArr, 
	      int x, int y, boolean xory) { 
	    try { 
	      int w = img.getWidth(); 
	      int h = img.getHeight(); 
	      g = img.createGraphics(); 
	      g.setBackground(Color.WHITE); 
	      g.setColor(Color.RED); 
	      if (this.font != null) 
	        g.setFont(this.font); 
	      // 验证输出位置的纵坐标和横坐标 
	      if (x >= h || y >= w) { 
	        this.x = h - this.fontsize + 2; 
	        this.y = w; 
	      } else { 
	        this.x = x; 
	        this.y = y; 
	      } 
	      if (contentArr != null) { 
	        int arrlen = contentArr.length; 
	        if (xory) { 
	          for (int i = 0; i < arrlen; i++) { 
	            g.drawString(contentArr[i].toString(), this.x, this.y); 
	            this.x += contentArr[i].toString().length() 
	                * this.fontsize / 2 + 5;// 重新计算文本输出位置 
	          } 
	        } else { 
	          for (int i = 0; i < arrlen; i++) { 
	            g.drawString(contentArr[i].toString(), this.x, this.y); 
	            this.y += this.fontsize + 2;// 重新计算文本输出位置 
	          } 
	        } 
	      } 
	      g.dispose(); 
	    } catch (Exception e) { 
	      System.out.println(e.getMessage()); 
	    } 
	   
	    return img; 
	  } 
	   
	  /**
	   * 修改图片,返回修改后的图片缓冲区(只输出一行文本)
	   * 
	   * 时间:2007-10-8
	   * 
	   * @param img
	   * @return
	   */
	  public BufferedImage modifyImageYe(BufferedImage img) { 
	   
	    try { 
	      int w = img.getWidth(); 
	      int h = img.getHeight(); 
	      g = img.createGraphics(); 
	      g.setBackground(Color.WHITE); 
	      g.setColor(Color.blue);//设置字体颜色 
	      if (this.font != null) 
	        g.setFont(this.font); 
	      g.drawString("reyo.cn", w - 85, h - 5); 
	      g.dispose(); 
	    } catch (Exception e) { 
	      System.out.println(e.getMessage()); 
	    } 
	   
	    return img; 
	  } 
	   
	  public BufferedImage modifyImagetogeter(BufferedImage b, BufferedImage d) { 
	   
	    try { 
	      int w = b.getWidth(); 
	      int h = b.getHeight(); 
	         
	   
	      g = d.createGraphics(); 
	      g.drawImage(b, 100, 10, w, h, null); 
	      g.dispose(); 
	    } catch (Exception e) { 
	      System.out.println(e.getMessage()); 
	    } 
	   
	    return d; 
	  } 
	   

/生成身份证随机号码开始///
  public Map<String,String> Calculate()
  {
    String[] areaCodes = { "110000", "110100", "110101", "110102", 
      "110103", "110104", "110105", "110106", "110107", "110108", 
      "110109", "110111", "110112", "110113", "110114", "110115", 
      "110116", "110117", "110200", "110228", "110229", "120000", 
      "120100", "120101", "120102", "120103", "120104", "120105", 
      "120106", "120107", "120108", "120109", "120110", "120111", 
      "120112", "120113", "120114", "120115", "120200", "120221", 
      "120223", "120225", "130000", "130100", "130101", "130102", 
      "130103", "130104", "130105", "130107", "130108", "130121", 
      "130123", "130124", "130125", "130126", "130127", "130128", 
      "130129", "130130", "130131", "130132", "130133", "130181", 
      "130182", "130183", "130184", "130185", "130200", "130201", 
      "130202", "130203", "130204", "130205", "130207", "130208", 
      "130223", "130224", "130225", "130227", "130229", "130230", 
      "130281", "130283", "130300", "130301", "130302", "130303", 
      "130304", "130321", "130322", "130323", "130324", "130400", 
      "130401", "130402", "130403", "130404", "130406", "130421", 
      "130423", "130424", "130425", "130426", "130427", "130428", 
      "130429", "130430", "130431", "130432", "130433", "130434", 
      "130435", "130481", "130500", "130501", "130502", "130503", 
      "130521", "130522", "130523", "130524", "130525", "130526", 
      "130527", "130528", "130529", "130530", "130531", "130532", 
      "130533", "130534", "130535", "130581", "130582", "130600", 
      "130601", "130602", "130603", "130604", "130621", "130622", 
      "130623", "130624", "130625", "130626", "130627", "130628", 
      "130629", "130630", "130631", "130632", "130634", "130635", 
      "130636", "130637", "130638", "130681", "130682", "130683", 
      "130684", "130700", "130701", "130702", "130703", "130705", 
      "130706", "130721", "130722", "130723", "130724", "130725", 
      "130726", "130727", "130728", "130729", "130730", "130731", 
      "130732", "130733", "130800", "130801", "130802", "130803", 
      "130804", "130821", "130822", "130823", "130824", "130825", 
      "130826", "130827", "130828", "130900", "130901", "130902", 
      "130903", "130921", "130922", "130923", "130924", "130925", 
      "130926", "130927", "130928", "130929", "130930", "130981", 
      "130982", "130983", "130984", "131000", "131001", "131002", 
      "131003", "131022", "131023", "131024", "131025", "131026", 
      "131028", "131081", "131082", "131100", "131101", "131102", 
      "131121", "131122", "131123", "131124", "131125", "131126", 
      "131127", "131128", "131181", "131182", "140000", "140100", 
      "140101", "140105", "140106", "140107", "140108", "140109", 
      "140110", "140121", "140122", "140123", "140181", "140200", 
      "140201", "140202", "140203", "140211", "140212", "140221", 
      "140222", "140223", "140224", "140225", "140226", "140227", 
      "140300", "140301", "140302", "140303", "140311", "140321", 
      "140322", "140400", "140401", "140402", "140411", "140421", 
      "140423", "140424", "140425", "140426", "140427", "140428", 
      "140429", "140430", "140431", "140481", "140500", "140501", 
      "140502", "140521", "140522", "140524", "140525", "140581", 
      "140600", "140601", "140602", "140603", "140621", "140622", 
      "140623", "140624", "140700", "140701", "140702", "140721", 
      "140722", "140723", "140724", "140725", "140726", "140727", 
      "140728", "140729", "140781", "140800", "140801", "140802", 
      "140821", "140822", "140823", "140824", "140825", "140826", 
      "140827", "140828", "140829", "140830", "140881", "140882", 
      "140900", "140901", "140902", "140921", "140922", "140923", 
      "140924", "140925", "140926", "140927", "140928", "140929", 
      "140930", "140931", "140932", "140981", "141000", "141001", 
      "141002", "141021", "141022", "141023", "141024", "141025", 
      "141026", "141027", "141028", "141029", "141030", "141031", 
      "141032", "141033", "141034", "141081", "141082", "141100", 
      "141101", "141102", "141121", "141122", "141123", "141124", 
      "141125", "141126", "141127", "141128", "141129", "141130", 
      "141181", "141182", "150000", "150100", "150101", "150102", 
      "150103", "150104", "150105", "150121", "150122", "150123", 
      "150124", "150125", "150200", "150201", "150202", "150203", 
      "150204", "150205", "150206", "150207", "150221", "150222", 
      "150223", "150300", "150301", "150302", "150303", "150304", 
      "150400", "150401", "150402", "150403", "150404", "150421", 
      "150422", "150423", "150424", "150425", "150426", "150428", 
      "150429", "150430", "150500", "150501", "150502", "150521", 
      "150522", "150523", "150524", "150525", "150526", "150581", 
      "150600", "150602", "150621", "150622", "150623", "150624", 
      "150625", "150626", "150627", "150700", "150701", "150702", 
      "150721", "150722", "150723", "150724", "150725", "150726", 
      "150727", "150781", "150782", "150783", "150784", "150785", 
      "150800", "150801", "150802", "150821", "150822", "150823", 
      "150824", "150825", "150826", "150900", "150901", "150902", 
      "150921", "150922", "150923", "150924", "150925", "150926", 
      "150927", "150928", "150929", "150981", "152200", "152201", 
      "152202", "152221", "152222", "152223", "152224", "152500", 
      "152501", "152502", "152522", "152523", "152524", "152525", 
      "152526", "152527", "152528", "152529", "152530", "152531", 
      "152600", "152900", "152921", "152922", "152923", "210000", 
      "210100", "210101", "210102", "210103", "210104", "210105", 
      "210106", "210111", "210112", "210113", "210114", "210122", 
      "210123", "210124", "210181", "210200", "210201", "210202", 
      "210203", "210204", "210211", "210212", "210213", "210224", 
      "210281", "210282", "210283", "210300", "210301", "210302", 
      "210303", "210304", "210311", "210321", "210323", "210381", 
      "210400", "210401", "210402", "210403", "210404", "210411", 
      "210421", "210422", "210423", "210500", "210501", "210502", 
      "210503", "210504", "210505", "210521", "210522", "210600", 
      "210601", "210602", "210603", "210604", "210624", "210681", 
      "210682", "210700", "210701", "210702", "210703", "210711", 
      "210726", "210727", "210781", "210782", "210800", "210801", 
      "210802", "210803", "210804", "210811", "210881", "210882", 
      "210900", "210901", "210902", "210903", "210904", "210905", 
      "210911", "210921", "210922", "211000", "211001", "211002", 
      "211003", "211004", "211005", "211011", "211021", "211081", 
      "211100", "211101", "211102", "211103", "211121", "211122", 
      "211200", "211201", "211202", "211204", "211221", "211223", 
      "211224", "211281", "211282", "211300", "211301", "211302", 
      "211303", "211321", "211322", "211324", "211381", "211382", 
      "211400", "211401", "211402", "211403", "211404", "211421", 
      "211422", "211481", "220000", "220100", "220101", "220102", 
      "220103", "220104", "220105", "220106", "220112", "220122", 
      "220181", "220182", "220183", "220200", "220201", "220202", 
      "220203", "220204", "220211", "220221", "220281", "220282", 
      "220283", "220284", "220300", "220301", "220302", "220303", 
      "220322", "220323", "220381", "220382", "220400", "220401", 
      "220402", "220403", "220421", "220422", "220500", "220501", 
      "220502", "220503", "220521", "220523", "220524", "220581", 
      "220582", "220600", "220601", "220602", "220621", "220622", 
      "220623", "220625", "220681", "220700", "220701", "220702", 
      "220721", "220722", "220723", "220724", "220800", "220801", 
      "220802", "220821", "220822", "220881", "220882", "222400", 
      "222401", "222402", "222403", "222404", "222405", "222406", 
      "222424", "222426", "230000", "230100", "230101", "230102", 
      "230103", "230104", "230105", "230106", "230107", "230108", 
      "230121", "230123", "230124", "230125", "230126", "230127", 
      "230128", "230129", "230181", "230182", "230183", "230184", 
      "230200", "230201", "230202", "230203", "230204", "230205", 
      "230206", "230207", "230208", "230221", "230223", "230224", 
      "230225", "230227", "230229", "230230", "230231", "230281", 
      "230300", "230301", "230302", "230303", "230304", "230305", 
      "230306", "230307", "230321", "230381", "230382", "230400", 
      "230401", "230402", "230403", "230404", "230405", "230406", 
      "230407", "230421", "230422", "230500", "230501", "230502", 
      "230503", "230505", "230506", "230521", "230522", "230523", 
      "230524", "230600", "230601", "230602", "230603", "230604", 
      "230605", "230606", "230621", "230622", "230623", "230624", 
      "230700", "230701", "230702", "230703", "230704", "230705", 
      "230706", "230707", "230708", "230709", "230710", "230711", 
      "230712", "230713", "230714", "230715", "230716", "230722", 
      "230781", "230800", "230801", "230802", "230803", "230804", 
      "230805", "230811", "230822", "230826", "230828", "230833", 
      "230881", "230882", "230900", "230901", "230902", "230903", 
      "230904", "230921", "231000", "231001", "231002", "231003", 
      "231004", "231005", "231024", "231025", "231081", "231083", 
      "231084", "231085", "231100", "231101", "231102", "231121", 
      "231123", "231124", "231181", "231182", "231200", "231201", 
      "231202", "231221", "231222", "231223", "231224", "231225", 
      "231226", "231281", "231282", "231283", "232700", "232721", 
      "232722", "232723", "310000", "310100", "310101", "310103", 
      "310104", "310105", "310106", "310107", "310108", "310109", 
      "310110", "310112", "310113", "310114", "310115", "310116", 
      "310117", "310118", "310119", "310120", "310200", "310230", 
      "320000", "320100", "320101", "320102", "320103", "320104", 
      "320105", "320106", "320107", "320111", "320113", "320114", 
      "320115", "320116", "320124", "320125", "320200", "320201", 
      "320202", "320203", "320204", "320205", "320206", "320211", 
      "320281", "320282", "320300", "320301", "320302", "320303", 
      "320304", "320305", "320311", "320321", "320322", "320323", 
      "320324", "320381", "320382", "320400", "320401", "320402", 
      "320404", "320405", "320411", "320412", "320481", "320482", 
      "320500", "320501", "320502", "320503", "320504", "320505", 
      "320506", "320507", "320581", "320582", "320583", "320584", 
      "320585", "320600", "320601", "320602", "320611", "320621", 
      "320623", "320681", "320682", "320683", "320684", "320700", 
      "320701", "320703", "320705", "320706", "320721", "320722", 
      "320723", "320724", "320800", "320801", "320802", "320803", 
      "320804", "320811", "320826", "320829", "320830", "320831", 
      "320900", "320901", "320902", "320903", "320921", "320922", 
      "320923", "320924", "320925", "320981", "320982", "321000", 
      "321001", "321002", "321003", "321011", "321023", "321081", 
      "321084", "321088", "321100", "321101", "321102", "321111", 
      "321112", "321181", "321182", "321183", "321200", "321201", 
      "321202", "321203", "321281", "321282", "321283", "321284", 
      "321300", "321301", "321302", "321321", "321322", "321323", 
      "321324", "330000", "330100", "330101", "330102", "330103", 
      "330104", "330105", "330106", "330108", "330109", "330110", 
      "330122", "330127", "330182", "330183", "330185", "330200", 
      "330201", "330203", "330204", "330205", "330206", "330211", 
      "330212", "330225", "330226", "330281", "330282", "330283", 
      "330300", "330301", "330302", "330303", "330304", "330322", 
      "330324", "330326", "330327", "330328", "330329", "330381", 
      "330382", "330400", "330401", "330402", "330411", "330421", 
      "330424", "330481", "330482", "330483", "330500", "330501", 
      "330502", "330503", "330521", "330522", "330523", "330600", 
      "330601", "330602", "330621", "330624", "330681", "330682", 
      "330683", "330700", "330701", "330702", "330703", "330723", 
      "330726", "330727", "330781", "330782", "330783", "330784", 
      "330800", "330801", "330802", "330803", "330822", "330824", 
      "330825", "330881", "330900", "330901", "330902", "330903", 
      "330921", "330922", "331000", "331001", "331002", "331003", 
      "331004", "331021", "331022", "331023", "331024", "331081", 
      "331082", "331100", "331101", "331102", "331121", "331122", 
      "331123", "331124", "331125", "331126", "331127", "331181", 
      "340000", "340100", "340101", "340102", "340103", "340104", 
      "340111", "340121", "340122", "340123", "340200", "340201", 
      "340202", "340203", "340204", "340207", "340221", "340222", 
      "340223", "340300", "340301", "340302", "340303", "340304", 
      "340311", "340321", "340322", "340323", "340400", "340401", 
      "340402", "340403", "340404", "340405", "340406", "340421", 
      "340500", "340501", "340502", "340503", "340504", "340521", 
      "340600", "340601", "340602", "340603", "340604", "340621", 
      "340700", "340701", "340702", "340703", "340711", "340721", 
      "340800", "340801", "340802", "340803", "340811", "340822", 
      "340823", "340824", "340825", "340826", "340827", "340828", 
      "340881", "341000", "341001", "341002", "341003", "341004", 
      "341021", "341022", "341023", "341024", "341100", "341101", 
      "341102", "341103", "341122", "341124", "341125", "341126", 
      "341181", "341182", "341200", "341201", "341202", "341203", 
      "341204", "341221", "341222", "341225", "341226", "341282", 
      "341300", "341301", "341302", "341321", "341322", "341323", 
      "341324", "341400", "341401", "341402", "341421", "341422", 
      "341423", "341424", "341500", "341501", "341502", "341503", 
      "341521", "341522", "341523", "341524", "341525", "341600", 
      "341601", "341602", "341621", "341622", "341623", "341700", 
      "341701", "341702", "341721", "341722", "341723", "341800", 
      "341801", "341802", "341821", "341822", "341823", "341824", 
      "341825", "341881", "350000", "350100", "350101", "350102", 
      "350103", "350104", "350105", "350111", "350121", "350122", 
      "350123", "350124", "350125", "350128", "350181", "350182", 
      "350200", "350201", "350203", "350205", "350206", "350211", 
      "350212", "350213", "350300", "350301", "350302", "350303", 
      "350304", "350305", "350322", "350400", "350401", "350402", 
      "350403", "350421", "350423", "350424", "350425", "350426", 
      "350427", "350428", "350429", "350430", "350481", "350500", 
      "350501", "350502", "350503", "350504", "350505", "350521", 
      "350524", "350525", "350526", "350527", "350581", "350582", 
      "350583", "350600", "350601", "350602", "350603", "350622", 
      "350623", "350624", "350625", "350626", "350627", "350628", 
      "350629", "350681", "350700", "350701", "350702", "350721", 
      "350722", "350723", "350724", "350725", "350781", "350782", 
      "350783", "350784", "350800", "350801", "350802", "350821", 
      "350822", "350823", "350824", "350825", "350881", "350900", 
      "350901", "350902", "350921", "350922", "350923", "350924", 
      "350925", "350926", "350981", "350982", "360000", "360100", 
      "360101", "360102", "360103", "360104", "360105", "360111", 
      "360121", "360122", "360123", "360124", "360200", "360201", 
      "360202", "360203", "360222", "360281", "360300", "360301", 
      "360302", "360313", "360321", "360322", "360323", "360400", 
      "360401", "360402", "360403", "360421", "360423", "360424", 
      "360425", "360426", "360427", "360428", "360429", "360430", 
      "360481", "360500", "360501", "360502", "360521", "360600", 
      "360601", "360602", "360622", "360681", "360700", "360701", 
      "360702", "360721", "360722", "360723", "360724", "360725", 
      "360726", "360727", "360728", "360729", "360730", "360731", 
      "360732", "360733", "360734", "360735", "360781", "360782", 
      "360800", "360801", "360802", "360803", "360821", "360822", 
      "360823", "360824", "360825", "360826", "360827", "360828", 
      "360829", "360830", "360881", "360900", "360901", "360902", 
      "360921", "360922", "360923", "360924", "360925", "360926", 
      "360981", "360982", "360983", "361000", "361001", "361002", 
      "361021", "361022", "361023", "361024", "361025", "361026", 
      "361027", "361028", "361029", "361030", "361100", "361101", 
      "361102", "361121", "361122", "361123", "361124", "361125", 
      "361126", "361127", "361128", "361129", "361130", "361181", 
      "370000", "370100", "370101", "370102", "370103", "370104", 
      "370105", "370112", "370113", "370124", "370125", "370126", 
      "370181", "370200", "370201", "370202", "370203", "370205", 
      "370211", "370212", "370213", "370214", "370281", "370282", 
      "370283", "370284", "370285", "370300", "370301", "370302", 
      "370303", "370304", "370305", "370306", "370321", "370322", 
      "370323", "370400", "370401", "370402", "370403", "370404", 
      "370405", "370406", "370481", "370500", "370501", "370502", 
      "370503", "370521", "370522", "370523", "370600", "370601", 
      "370602", "370611", "370612", "370613", "370634", "370681", 
      "370682", "370683", "370684", "370685", "370686", "370687", 
      "370700", "370701", "370702", "370703", "370704", "370705", 
      "370724", "370725", "370781", "370782", "370783", "370784", 
      "370785", "370786", "370800", "370801", "370802", "370811", 
      "370826", "370827", "370828", "370829", "370830", "370831", 
      "370832", "370881", "370882", "370883", "370900", "370901", 
      "370902", "370903", "370921", "370923", "370982", "370983", 
      "371000", "371001", "371002", "371081", "371082", "371083", 
      "371100", "371101", "371102", "371121", "371122", "371200", 
      "371201", "371202", "371203", "371300", "371301", "371302", 
      "371311", "371312", "371321", "371322", "371323", "371324", 
      "371325", "371326", "371327", "371328", "371329", "371400", 
      "371401", "371402", "371421", "371422", "371423", "371424", 
      "371425", "371426", "371427", "371428", "371481", "371482", 
      "371500", "371501", "371502", "371521", "371522", "371523", 
      "371524", "371525", "371526", "371581", "371600", "371601", 
      "371602", "371621", "371622", "371623", "371624", "371625", 
      "371626", "371700", "371701", "371702", "371721", "371722", 
      "371723", "371724", "371725", "371726", "371727", "371728", 
      "410000", "410100", "410101", "410102", "410103", "410104", 
      "410105", "410106", "410108", "410122", "410181", "410182", 
      "410183", "410184", "410185", "410200", "410201", "410202", 
      "410203", "410204", "410205", "410211", "410221", "410222", 
      "410223", "410224", "410225", "410300", "410301", "410302", 
      "410303", "410304", "410305", "410306", "410307", "410322", 
      "410323", "410324", "410325", "410326", "410327", "410328", 
      "410329", "410381", "410400", "410401", "410402", "410403", 
      "410404", "410411", "410421", "410422", "410423", "410425", 
      "410481", "410482", "410500", "410501", "410502", "410503", 
      "410505", "410506", "410522", "410523", "410526", "410527", 
      "410581", "410600", "410601", "410602", "410603", "410611", 
      "410621", "410622", "410700", "410701", "410702", "410703", 
      "410704", "410711", "410721", "410724", "410725", "410726", 
      "410727", "410728", "410781", "410782", "410800", "410801", 
      "410802", "410803", "410804", "410811", "410821", "410822", 
      "410823", "410825", "410881", "410882", "410883", "410900", 
      "410901", "410902", "410922", "410923", "410926", "410927", 
      "410928", "411000", "411001", "411002", "411023", "411024", 
      "411025", "411081", "411082", "411100", "411101", "411102", 
      "411121", "411122", "411123", "411200", "411201", "411202", 
      "411221", "411222", "411224", "411281", "411282", "411300", 
      "411301", "411302", "411303", "411321", "411322", "411323", 
      "411324", "411325", "411326", "411327", "411328", "411329", 
      "411330", "411381", "411400", "411401", "411402", "411403", 
      "411421", "411422", "411423", "411424", "411425", "411426", 
      "411481", "411500", "411501", "411502", "411503", "411521", 
      "411522", "411523", "411524", "411525", "411526", "411527", 
      "411528", "411600", "411601", "411602", "411621", "411622", 
      "411623", "411624", "411625", "411626", "411627", "411628", 
      "411681", "411700", "411701", "411702", "411721", "411722", 
      "411723", "411724", "411725", "411726", "411727", "411728", 
      "411729", "420000", "420100", "420101", "420102", "420103", 
      "420104", "420105", "420106", "420107", "420111", "420112", 
      "420113", "420114", "420115", "420116", "420117", "420200", 
      "420201", "420202", "420203", "420204", "420205", "420222", 
      "420281", "420300", "420301", "420302", "420303", "420321", 
      "420322", "420323", "420324", "420325", "420381", "420500", 
      "420501", "420502", "420503", "420504", "420505", "420506", 
      "420525", "420526", "420527", "420528", "420529", "420581", 
      "420582", "420583", "420600", "420601", "420602", "420606", 
      "420607", "420624", "420625", "420626", "420682", "420683", 
      "420684", "420700", "420701", "420702", "420703", "420704", 
      "420800", "420801", "420802", "420804", "420821", "420822", 
      "420881", "420900", "420901", "420902", "420921", "420922", 
      "420923", "420981", "420982", "420984", "421000", "421001", 
      "421002", "421003", "421022", "421023", "421024", "421081", 
      "421083", "421087", "421100", "421101", "421102", "421121", 
      "421122", "421123", "421124", "421125", "421126", "421127", 
      "421181", "421182", "421200", "421201", "421202", "421221", 
      "421222", "421223", "421224", "421281", "421300", "421301", 
      "421302", "421381", "422800", "422801", "422802", "422822", 
      "422823", "422825", "422826", "422827", "422828", "429000", 
      "429004", "429005", "429006", "429021", "430000", "430100", 
      "430101", "430102", "430103", "430104", "430105", "430111", 
      "430121", "430122", "430124", "430181", "430200", "430201", 
      "430202", "430203", "430204", "430211", "430221", "430223", 
      "430224", "430225", "430281", "430300", "430301", "430302", 
      "430304", "430321", "430381", "430382", "430400", "430401", 
      "430405", "430406", "430407", "430408", "430412", "430421", 
      "430422", "430423", "430424", "430426", "430481", "430482", 
      "430500", "430501", "430502", "430503", "430511", "430521", 
      "430522", "430523", "430524", "430525", "430527", "430528", 
      "430529", "430581", "430600", "430601", "430602", "430603", 
      "430611", "430621", "430623", "430624", "430626", "430681", 
      "430682", "430700", "430701", "430702", "430703", "430721", 
      "430722", "430723", "430724", "430725", "430726", "430781", 
      "430800", "430801", "430802", "430811", "430821", "430822", 
      "430900", "430901", "430902", "430903", "430921", "430922", 
      "430923", "430981", "431000", "431001", "431002", "431003", 
      "431021", "431022", "431023", "431024", "431025", "431026", 
      "431027", "431028", "431081", "431100", "431101", "431102", 
      "431103", "431121", "431122", "431123", "431124", "431125", 
      "431126", "431127", "431128", "431129", "431200", "431201", 
      "431202", "431221", "431222", "431223", "431224", "431225", 
      "431226", "431227", "431228", "431229", "431230", "431281", 
      "431300", "431301", "431302", "431321", "431322", "431381", 
      "431382", "433100", "433101", "433122", "433123", "433124", 
      "433125", "433126", "433127", "433130", "440000", "440100", 
      "440101", "440102", "440103", "440104", "440105", "440106", 
      "440107", "440111", "440112", "440113", "440114", "440183", 
      "440184", "440200", "440201", "440202", "440203", "440204", 
      "440221", "440222", "440224", "440229", "440232", "440233", 
      "440281", "440282", "440300", "440301", "440303", "440304", 
      "440305", "440306", "440307", "440308", "440400", "440401", 
      "440402", "440403", "440404", "440500", "440501", "440507", 
      "440511", "440512", "440513", "440514", "440515", "440523", 
      "440600", "440601", "440604", "440605", "440606", "440607", 
      "440608", "440700", "440701", "440703", "440704", "440705", 
      "440781", "440783", "440784", "440785", "440800", "440801", 
      "440802", "440803", "440804", "440811", "440823", "440825", 
      "440881", "440882", "440883", "440900", "440901", "440902", 
      "440903", "440923", "440981", "440982", "440983", "441200", 
      "441201", "441202", "441203", "441223", "441224", "441225", 
      "441226", "441283", "441284", "441300", "441301", "441302", 
      "441303", "441322", "441323", "441324", "441400", "441401", 
      "441402", "441421", "441422", "441423", "441424", "441426", 
      "441427", "441481", "441500", "441501", "441502", "441521", 
      "441523", "441581", "441600", "441601", "441602", "441621", 
      "441622", "441623", "441624", "441625", "441700", "441701", 
      "441702", "441721", "441723", "441781", "441800", "441801", 
      "441802", "441821", "441823", "441825", "441826", "441827", 
      "441881", "441882", "441900", "442000", "445100", "445101", 
      "445102", "445121", "445122", "445200", "445201", "445202", 
      "445221", "445222", "445224", "445281", "445300", "445301", 
      "445302", "445321", "445322", "445323", "445381", "450000", 
      "450100", "450101", "450102", "450103", "450104", "450105", 
      "450106", "450121", "450122", "450123", "450124", "450125", 
      "450126", "450127", "450200", "450201", "450202", "450203", 
      "450204", "450205", "450221", "450222", "450223", "450224", 
      "450225", "450226", "450300", "450301", "450302", "450303", 
      "450304", "450305", "450311", "450321", "450322", "450323", 
      "450324", "450325", "450326", "450327", "450328", "450329", 
      "450330", "450331", "450332", "450400", "450401", "450403", 
      "450404", "450405", "450421", "450422", "450423", "450481", 
      "450500", "450501", "450502", "450503", "450512", "450521", 
      "450600", "450601", "450602", "450603", "450621", "450681", 
      "450700", "450701", "450702", "450703", "450721", "450722", 
      "450800", "450801", "450802", "450803", "450804", "450821", 
      "450881", "450900", "450901", "450902", "450921", "450922", 
      "450923", "450924", "450981", "451000", "451001", "451002", 
      "451021", "451022", "451023", "451024", "451025", "451026", 
      "451027", "451028", "451029", "451030", "451031", "451100", 
      "451101", "451102", "451121", "451122", "451123", "451200", 
      "451201", "451202", "451221", "451222", "451223", "451224", 
      "451225", "451226", "451227", "451228", "451229", "451281", 
      "451300", "451301", "451302", "451321", "451322", "451323", 
      "451324", "451381", "451400", "451401", "451402", "451421", 
      "451422", "451423", "451424", "451425", "451481", "460000", 
      "460100", "460101", "460105", "460106", "460107", "460108", 
      "460200", "460201", "469000", "469001", "469002", "469003", 
      "469005", "469006", "469007", "469025", "469026", "469027", 
      "469028", "469030", "469031", "469033", "469034", "469035", 
      "469036", "469037", "469038", "469039", "500000", "500100", 
      "500101", "500102", "500103", "500104", "500105", "500106", 
      "500107", "500108", "500109", "500110", "500111", "500112", 
      "500113", "500114", "500115", "500200", "500222", "500223", 
      "500224", "500225", "500226", "500227", "500228", "500229", 
      "500230", "500231", "500232", "500233", "500234", "500235", 
      "500236", "500237", "500238", "500240", "500241", "500242", 
      "500243", "500300", "500381", "500382", "500383", "500384", 
      "510000", "510100", "510101", "510104", "510105", "510106", 
      "510107", "510108", "510112", "510113", "510114", "510115", 
      "510121", "510122", "510124", "510129", "510131", "510132", 
      "510181", "510182", "510183", "510184", "510300", "510301", 
      "510302", "510303", "510304", "510311", "510321", "510322", 
      "510400", "510401", "510402", "510403", "510411", "510421", 
      "510422", "510500", "510501", "510502", "510503", "510504", 
      "510521", "510522", "510524", "510525", "510600", "510601", 
      "510603", "510623", "510626", "510681", "510682", "510683", 
      "510700", "510701", "510703", "510704", "510722", "510723", 
      "510724", "510725", "510726", "510727", "510781", "510800", 
      "510801", "510802", "510811", "510812", "510821", "510822", 
      "510823", "510824", "510900", "510901", "510903", "510904", 
      "510921", "510922", "510923", "511000", "511001", "511002", 
      "511011", "511024", "511025", "511028", "511100", "511101", 
      "511102", "511111", "511112", "511113", "511123", "511124", 
      "511126", "511129", "511132", "511133", "511181", "511300", 
      "511301", "511302", "511303", "511304", "511321", "511322", 
      "511323", "511324", "511325", "511381", "511400", "511401", 
      "511402", "511421", "511422", "511423", "511424", "511425", 
      "511500", "511501", "511502", "511521", "511522", "511523", 
      "511524", "511525", "511526", "511527", "511528", "511529", 
      "511600", "511601", "511602", "511621", "511622", "511623", 
      "511681", "511700", "511701", "511702", "511721", "511722", 
      "511723", "511724", "511725", "511781", "511800", "511801", 
      "511802", "511821", "511822", "511823", "511824", "511825", 
      "511826", "511827", "511900", "511901", "511902", "511921", 
      "511922", "511923", "512000", "512001", "512002", "512021", 
      "512022", "512081", "513200", "513221", "513222", "513223", 
      "513224", "513225", "513226", "513227", "513228", "513229", 
      "513230", "513231", "513232", "513233", "513300", "513321", 
      "513322", "513323", "513324", "513325", "513326", "513327", 
      "513328", "513329", "513330", "513331", "513332", "513333", 
      "513334", "513335", "513336", "513337", "513338", "513400", 
      "513401", "513422", "513423", "513424", "513425", "513426", 
      "513427", "513428", "513429", "513430", "513431", "513432", 
      "513433", "513434", "513435", "513436", "513437", "520000", 
      "520100", "520101", "520102", "520103", "520111", "520112", 
      "520113", "520114", "520121", "520122", "520123", "520181", 
      "520200", "520201", "520203", "520221", "520222", "520300", 
      "520301", "520302", "520303", "520321", "520322", "520323", 
      "520324", "520325", "520326", "520327", "520328", "520329", 
      "520330", "520381", "520382", "520400", "520401", "520402", 
      "520421", "520422", "520423", "520424", "520425", "522200", 
      "522201", "522222", "522223", "522224", "522225", "522226", 
      "522227", "522228", "522229", "522230", "522300", "522301", 
      "522322", "522323", "522324", "522325", "522326", "522327", 
      "522328", "522400", "522401", "522422", "522423", "522424", 
      "522425", "522426", "522427", "522428", "522600", "522601", 
      "522622", "522623", "522624", "522625", "522626", "522627", 
      "522628", "522629", "522630", "522631", "522632", "522633", 
      "522634", "522635", "522636", "522700", "522701", "522702", 
      "522722", "522723", "522725", "522726", "522727", "522728", 
      "522729", "522730", "522731", "522732", "530000", "530100", 
      "530101", "530102", "530103", "530111", "530112", "530113", 
      "530121", "530122", "530124", "530125", "530126", "530127", 
      "530128", "530129", "530181", "530300", "530301", "530302", 
      "530321", "530322", "530323", "530324", "530325", "530326", 
      "530328", "530381", "530400", "530401", "530402", "530421", 
      "530422", "530423", "530424", "530425", "530426", "530427", 
      "530428", "530500", "530501", "530502", "530521", "530522", 
      "530523", "530524", "530600", "530601", "530602", "530621", 
      "530622", "530623", "530624", "530625", "530626", "530627", 
      "530628", "530629", "530630", "530700", "530701", "530702", 
      "530721", "530722", "530723", "530724", "530800", "530801", 
      "530802", "530821", "530822", "530823", "530824", "530825", 
      "530826", "530827", "530828", "530829", "530900", "530901", 
      "530902", "530921", "530922", "530923", "530924", "530925", 
      "530926", "530927", "532300", "532301", "532322", "532323", 
      "532324", "532325", "532326", "532327", "532328", "532329", 
      "532331", "532500", "532501", "532502", "532522", "532523", 
      "532524", "532525", "532526", "532527", "532528", "532529", 
      "532530", "532531", "532532", "532600", "532621", "532622", 
      "532623", "532624", "532625", "532626", "532627", "532628", 
      "532800", "532801", "532822", "532823", "532900", "532901", 
      "532922", "532923", "532924", "532925", "532926", "532927", 
      "532928", "532929", "532930", "532931", "532932", "533100", 
      "533102", "533103", "533122", "533123", "533124", "533300", 
      "533321", "533323", "533324", "533325", "533400", "533421", 
      "533422", "533423", "540000", "540100", "540101", "540102", 
      "540121", "540122", "540123", "540124", "540125", "540126", 
      "540127", "542100", "542121", "542122", "542123", "542124", 
      "542125", "542126", "542127", "542128", "542129", "542132", 
      "542133", "542200", "542221", "542222", "542223", "542224", 
      "542225", "542226", "542227", "542228", "542229", "542231", 
      "542232", "542233", "542300", "542301", "542322", "542323", 
      "542324", "542325", "542326", "542327", "542328", "542329", 
      "542330", "542331", "542332", "542333", "542334", "542335", 
      "542336", "542337", "542338", "542400", "542421", "542422", 
      "542423", "542424", "542425", "542426", "542427", "542428", 
      "542429", "542430", "542500", "542521", "542522", "542523", 
      "542524", "542525", "542526", "542527", "542600", "542621", 
      "542622", "542623", "542624", "542625", "542626", "542627", 
      "610000", "610100", "610101", "610102", "610103", "610104", 
      "610111", "610112", "610113", "610114", "610115", "610116", 
      "610122", "610124", "610125", "610126", "610200", "610201", 
      "610202", "610203", "610204", "610222", "610300", "610301", 
      "610302", "610303", "610304", "610322", "610323", "610324", 
      "610326", "610327", "610328", "610329", "610330", "610331", 
      "610400", "610401", "610402", "610403", "610404", "610422", 
      "610423", "610424", "610425", "610426", "610427", "610428", 
      "610429", "610430", "610431", "610481", "610500", "610501", 
      "610502", "610521", "610522", "610523", "610524", "610525", 
      "610526", "610527", "610528", "610581", "610582", "610600", 
      "610601", "610602", "610621", "610622", "610623", "610625", 
      "610626", "610627", "610628", "610629", "610630", "610631", 
      "610632", "610700", "610701", "610702", "610721", "610722", 
      "610723", "610724", "610725", "610726", "610727", "610728", 
      "610729", "610730", "610800", "610801", "610802", "610821", 
      "610822", "610823", "610824", "610825", "610826", "610827", 
      "610828", "610829", "610830", "610831", "610900", "610901", 
      "610902", "610921", "610922", "610923", "610924", "610925", 
      "610926", "610927", "610928", "610929", "611000", "611001", 
      "611002", "611021", "611022", "611023", "611024", "611025", 
      "611026", "620000", "620100", "620101", "620102", "620103", 
      "620104", "620105", "620111", "620121", "620122", "620123", 
      "620200", "620201", "620300", "620301", "620302", "620321", 
      "620400", "620401", "620402", "620403", "620421", "620422", 
      "620423", "620500", "620501", "620502", "620503", "620521", 
      "620522", "620523", "620524", "620525", "620600", "620601", 
      "620602", "620621", "620622", "620623", "620700", "620701", 
      "620702", "620721", "620722", "620723", "620724", "620725", 
      "620800", "620801", "620802", "620821", "620822", "620823", 
      "620824", "620825", "620826", "620900", "620901", "620902", 
      "620921", "620922", "620923", "620924", "620981", "620982", 
      "621000", "621001", "621002", "621021", "621022", "621023", 
      "621024", "621025", "621026", "621027", "621100", "621101", 
      "621102", "621121", "621122", "621123", "621124", "621125", 
      "621126", "622600", "622621", "622623", "622624", "622625", 
      "622626", "622627", "622628", "622629", "622630", "622900", 
      "622901", "622921", "622922", "622923", "622924", "622925", 
      "622926", "622927", "623000", "623001", "623021", "623022", 
      "623023", "623024", "623025", "623026", "623027", "630000", 
      "630100", "630101", "630102", "630103", "630104", "630105", 
      "630121", "630122", "630123", "632100", "632121", "632122", 
      "632123", "632126", "632127", "632128", "632200", "632221", 
      "632222", "632223", "632224", "632300", "632321", "632322", 
      "632323", "632324", "632500", "632521", "632522", "632523", 
      "632524", "632525", "632600", "632621", "632622", "632623", 
      "632624", "632625", "632626", "632700", "632721", "632722", 
      "632723", "632724", "632725", "632726", "632800", "632801", 
      "632802", "632821", "632822", "632823", "640000", "640100", 
      "640101", "640104", "640105", "640106", "640122", "640181", 
      "640200", "640201", "640202", "640205", "640221", "640300", 
      "640301", "640302", "640323", "640324", "640381", "640400", 
      "640401", "640402", "640422", "640423", "640424", "640425", 
      "640500", "640501", "640502", "640521", "640522", "650000", 
      "650100", "650101", "650102", "650103", "650104", "650105", 
      "650106", "650107", "650108", "650121", "650200", "650201", 
      "650202", "650203", "650204", "650205", "652100", "652101", 
      "652122", "652123", "652200", "652201", "652222", "652223", 
      "652300", "652301", "652302", "652303", "652323", "652324", 
      "652325", "652327", "652328", "652700", "652701", "652722", 
      "652723", "652800", "652801", "652822", "652823", "652824", 
      "652825", "652826", "652827", "652828", "652829", "652900", 
      "652901", "652922", "652923", "652924", "652925", "652926", 
      "652927", "652928", "652929", "653000", "653001", "653022", 
      "653023", "653024", "653100", "653101", "653121", "653122", 
      "653123", "653124", "653125", "653126", "653127", "653128", 
      "653129", "653130", "653131", "653200", "653201", "653221", 
      "653222", "653223", "653224", "653225", "653226", "653227", 
      "654000", "654002", "654003", "654021", "654022", "654023", 
      "654024", "654025", "654026", "654027", "654028", "654200", 
      "654201", "654202", "654221", "654223", "654224", "654225", 
      "654226", "654300", "654301", "654321", "654322", "654323", 
      "654324", "654325", "654326", "659000", "659001", "659002", 
      "659003", "659004" };
    Random random = new Random();
	HashMap<String,String> result = new HashMap<>();
    String areaCode = areaCodes[random.nextInt(areaCodes.length)];
    int year = 1977 + random.nextInt(22);
	//int year = 2017;
    int month = random.nextInt(11);
    if (month == 0)
      month = 12;
    int day = 0;
    do
      day = random.nextInt(31);
    while ((day == 0) || ((((month == 4) || (month == 6) || (month == 9) || (month == 11))) && ((
      (day > 30) || ((month == 2) && ((((year % 4 > 0) && (day > 28)) || (
      day > 29))))))));

    String birthday = String.valueOf(year * 10000 + month * 100 + day);
    String randomCode = String.valueOf(1000 + random.nextInt(999))
      .substring(1);
    String verify = getVerify(areaCode + birthday + randomCode);
    String ret = areaCode + birthday + randomCode + verify;
    String sex = ret.substring(16, 17);
    int i = Integer.parseInt(sex);
    if (i % 2 == 0)
      sex = "女";//M
    else {
      sex = "男";//F
    }
	result.put("IdCardNo",ret);
	result.put("year",birthday.substring(0,4));
	result.put("month",birthday.substring(4,6));
	result.put("day",birthday.substring(6,8));
	result.put("sex",sex);
    return result;//"IdCardNo:" + ret + "," + "birthday:" + birthday + "," + "sex:" + sex;
  }

  public static String getVerify(String cardId)
  {
    String[] ValCodeArr = { "1", "0", "X", "9", "8", "7", "6", "5", "4", 
      "3", "2" };
    String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", 
      "9", "10", "5", "8", "4", "2" };
    int TotalmulAiWi = 0;
    for (int i = 0; i < 17; ++i)
    {
      TotalmulAiWi = TotalmulAiWi + 
        Integer.parseInt(String.valueOf(cardId.charAt(i))) * 
        Integer.parseInt(Wi[i]);
    }
    int modValue = TotalmulAiWi % 11;
    String strVerifyCode = ValCodeArr[modValue];

    return strVerifyCode;
  }
///生成身份证号码结束
	//指定身份证号码
	public void defineIdno(Map<String,String> result,String idno){
		result.put("IdCardNo",idno);//更改身份证
		result.put("year",idno.substring(6,10));//更改年
		result.put("month",idno.substring(10,12));//更改月
		result.put("day",idno.substring(12,14));//更改日
	}
	public static void main(String[] args) { 
		IdnoPic tt = new IdnoPic(); 
		Map<String,String> result = tt.Calculate();
		System.out.println("是否随机生成身份证:1.随机;2.指定身份证号码");
		Scanner className = new Scanner(System.in);
		int classNo = className.nextInt();
		switch(classNo){
			case 1:
				break;
			case 2:
				System.out.println("请输入18位身份证,并回车~!");
				String tempIdno = new Scanner(System.in).nextLine();
				while(tempIdno.length()!=18){
					System.out.println("请重新输入18位身份证,并回车~!");
					tempIdno = new Scanner(System.in).nextLine();
				}
				tt.defineIdno(result,tempIdno);
				break;
		}
		System.out.println("请输入姓名,并回车:");
		Scanner scan = new Scanner(System.in);
		String name = scan.nextLine();//输入姓名
		String fileName = ".\\" + name + ".jpg"; //生成文件名
	    className.close();
		scan.close();
	    BufferedImage d = tt.loadImageLocal(".\\sfzzm.jpg"); 
		//BufferedImage b = tt.loadImageLocal("E:\\文件(word,excel,pdf,ppt.txt)\\zte-logo.png"); 
		//往图片上写文件 
		tt.writeImageLocal(fileName,tt.modifyImage(d,name,75,53)); //姓名
		tt.writeImageLocal(fileName,tt.modifyImage(d,result.get("sex"),75,83)); //性别
		tt.writeImageLocal(fileName,tt.modifyImage(d,"汉",158,83)); //民族
		tt.writeImageLocal(fileName,tt.modifyImage(d,result.get("year")+"     " + result.get("month") + "    " + result.get("day"),75,113)); //出生年月
		tt.writeImageLocal(fileName,tt.modifyImage(d,"深圳市福田区金田路荣超大厦",75,143)); //住址
		tt.writeImageLocal(fileName,tt.modifyImage(d,result.get("IdCardNo"),133,220)); //身份证号	   
	    //tt.writeImageLocal("D:\\cc.jpg", tt.modifyImagetogeter(b, d)); 
	    //将多张图片合在一起 
	    System.out.println("身份证生成成功~!"); 
	  } 
}

 

批处理idnoPic.bat

@echo off

:1
javac -encoding utf8 ".\IdnoPic.java"
cd ".\"
java IdnoPic

pause
goto 1

最终运行结果:

------------------------更新时间:2017年8月17日10:41:05--------------------------------------------

因为有时候需要批量生成图片,故此做了优化。具体如下:

功能概述:

1.     可随机生成一张图片(包括名字和身份证);

2.     可指定身份证号和名字生成一张图片

3.     可指定生成数量来批量生成(包括名字和身份证)

4.     可通过配置文件properties指定身份证和名字生成对应数量的图片(如果配置一个身份证的话,那么功能类似2)

5.     可通过输入”?”来获取帮助。帮助内容同下面的使用说明。

 

使用说明:

标签1:输入1,并回车。会在当前目录output文件夹中随机生成一个身份证;

标签2:输入2,并回车。提示输入有效身份证和姓名,完成之后,会在当前目录output文件夹中随机生成一个身份证;

标签1p:输入2p,并回车。提示输入生成的数量,完成之后,会在当前目录output文件夹中随机生成指定数量的身份证;

标签2p:需先在当前目录中的properties文件中填写需要指定生成的身份证和对应的姓名,配置完成后,输入2p,并回车。会在当前目录output文件夹中生成生成与有效的身份证号数量一致的身份证图片;!

文件目录如下:

配置文件idinfo.properties内容如下:

name="张三,liwu"
idno="44088219xx0102xxxx"
instructions="标签1:输入1,并回车。会在当前目录output文件夹中随机生成一个身份证;!标签2:输入2,并回车。提示输入有效身份证和姓名,完成之后,会在当前目录output文件夹中随机生成一个身份证;!标签1p:输入2p,并回车。提示输入生成的数量,完成之后,会在当前目录output文件夹中随机生成指定数量的身份证;!标签2p:需先在当前目录中的properties文件中填写需要指定生成的身份证和对应的姓名,配置完成后,输入2p,并回车。会在当前目录output文件夹中生成生成与有效的身份证号数量一致的身份证图片;!"

IdnoPic类

import javax.imageio.ImageIO; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.net.URL; 
import java.util.Random;
import java.util.Map;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
import java.util.Properties;

/** 
 * @author 苏宝伢 E-mail:by.su@qq.com 
 * @version 创建时间: 2017年8月15日 上午10:24:45
 */
public class IdnoPic {

	private Font font = new Font("华文细黑", Font.PLAIN, 18);// 添加字体的属性设置 
	   
	  private Graphics2D g = null; 
	   
	  private int fontsize = 0; 
	   
	  private int x = 0; 
	   
	  private int y = 0; 
	   
	  /**
	   * 导入本地图片到缓冲区
	   */
	  public BufferedImage loadImageLocal(String imgName) { 
	    try { 
	      return ImageIO.read(new File(imgName)); 
	    } catch (IOException e) { 
	      System.out.println(e.getMessage()); 
	    } 
	    return null; 
	  } 
	   
	  /**
	   * 导入网络图片到缓冲区
	   */
	  public BufferedImage loadImageUrl(String imgName) { 
	    try { 
	      URL url = new URL(imgName); 
	      return ImageIO.read(url); 
	    } catch (IOException e) { 
	      System.out.println(e.getMessage()); 
	    } 
	    return null; 
	  } 
	   
	  /**
	   * 生成新图片到本地
	   */
	  public void writeImageLocal(String newImage, BufferedImage img) { 
	    if (newImage != null && img != null) { 
	      try { 
	        File outputfile = new File(newImage); 
	        ImageIO.write(img, "jpg", outputfile); 
	      } catch (IOException e) { 
	        System.out.println(e.getMessage()); 
	      } 
	    } 
	  } 
	   
	  /**
	   * 设定文字的字体等
	   */
	  public void setFont(String fontStyle, int fontSize) { 
	    this.fontsize = fontSize; 
	    this.font = new Font(fontStyle, Font.BOLD, fontSize); 
	  } 
	   
	  /**
	   * 修改图片,返回修改后的图片缓冲区(只输出一行文本)
	   */
	  public BufferedImage modifyImage(BufferedImage img, Object content, int x, 
	      int y) { 
	   
	    try { 
	      int w = img.getWidth(); 
	      int h = img.getHeight(); 
	      g = img.createGraphics(); 
	      g.setBackground(Color.black); 
	      g.setColor(Color.black);//设置字体颜色 
	      if (this.font != null) 
	        g.setFont(this.font); 
	      // 验证输出位置的纵坐标和横坐标 
	      if (x >= h || y >= w) { 
	        this.x = h - this.fontsize + 2; 
	        this.y = w; 
	      } else { 
	        this.x = x; 
	        this.y = y; 
	      } 
	      if (content != null) { 
	        g.drawString(content.toString(), this.x, this.y); 
	      } 
	      g.dispose(); 
	    } catch (Exception e) { 
	      System.out.println(e.getMessage()); 
	    } 
	   
	    return img; 
	  } 
	   
	  /**
	   * 修改图片,返回修改后的图片缓冲区(输出多个文本段) xory:true表示将内容在一行中输出;false表示将内容多行输出
	   */
	  public BufferedImage modifyImage(BufferedImage img, Object[] contentArr, 
	      int x, int y, boolean xory) { 
	    try { 
	      int w = img.getWidth(); 
	      int h = img.getHeight(); 
	      g = img.createGraphics(); 
	      g.setBackground(Color.WHITE); 
	      g.setColor(Color.RED); 
	      if (this.font != null) 
	        g.setFont(this.font); 
	      // 验证输出位置的纵坐标和横坐标 
	      if (x >= h || y >= w) { 
	        this.x = h - this.fontsize + 2; 
	        this.y = w; 
	      } else { 
	        this.x = x; 
	        this.y = y; 
	      } 
	      if (contentArr != null) { 
	        int arrlen = contentArr.length; 
	        if (xory) { 
	          for (int i = 0; i < arrlen; i++) { 
	            g.drawString(contentArr[i].toString(), this.x, this.y); 
	            this.x += contentArr[i].toString().length() 
	                * this.fontsize / 2 + 5;// 重新计算文本输出位置 
	          } 
	        } else { 
	          for (int i = 0; i < arrlen; i++) { 
	            g.drawString(contentArr[i].toString(), this.x, this.y); 
	            this.y += this.fontsize + 2;// 重新计算文本输出位置 
	          } 
	        } 
	      } 
	      g.dispose(); 
	    } catch (Exception e) { 
	      System.out.println(e.getMessage()); 
	    } 
	   
	    return img; 
	  } 
	   
	  /**
	   * 修改图片,返回修改后的图片缓冲区(只输出一行文本)
	   * 
	   * 时间:2007-10-8
	   * 
	   * @param img
	   * @return
	   */
	  public BufferedImage modifyImageYe(BufferedImage img) { 
	   
	    try { 
	      int w = img.getWidth(); 
	      int h = img.getHeight(); 
	      g = img.createGraphics(); 
	      g.setBackground(Color.WHITE); 
	      g.setColor(Color.blue);//设置字体颜色 
	      if (this.font != null) 
	        g.setFont(this.font); 
	      g.drawString("reyo.cn", w - 85, h - 5); 
	      g.dispose(); 
	    } catch (Exception e) { 
	      System.out.println(e.getMessage()); 
	    } 
	   
	    return img; 
	  } 
	   
	  public BufferedImage modifyImagetogeter(BufferedImage b, BufferedImage d) { 
	   
	    try { 
	      int w = b.getWidth(); 
	      int h = b.getHeight(); 
	         
	   
	      g = d.createGraphics(); 
	      g.drawImage(b, 290, 5, w, h, null); //调整粘贴图片的位置
	      g.dispose(); 
	    } catch (Exception e) { 
	      System.out.println(e.getMessage()); 
	    } 
	   
	    return d; 
	  } 
	   

/生成身份证随机号码开始///
	//身份证前6位校验码
	public static String[] getareaCodes(){
		String[] getareaCodes = { "110000", "110100", "110101", "110102", 
      "110103", "110104", "110105", "110106", "110107", "110108", 
      "110109", "110111", "110112", "110113", "110114", "110115", 
      "110116", "110117", "110200", "110228", "110229", "120000", 
      "120100", "120101", "120102", "120103", "120104", "120105", 
      "120106", "120107", "120108", "120109", "120110", "120111", 
      "120112", "120113", "120114", "120115", "120200", "120221", 
      "120223", "120225", "130000", "130100", "130101", "130102", 
      "130103", "130104", "130105", "130107", "130108", "130121", 
      "130123", "130124", "130125", "130126", "130127", "130128", 
      "130129", "130130", "130131", "130132", "130133", "130181", 
      "130182", "130183", "130184", "130185", "130200", "130201", 
      "130202", "130203", "130204", "130205", "130207", "130208", 
      "130223", "130224", "130225", "130227", "130229", "130230", 
      "130281", "130283", "130300", "130301", "130302", "130303", 
      "130304", "130321", "130322", "130323", "130324", "130400", 
      "130401", "130402", "130403", "130404", "130406", "130421", 
      "130423", "130424", "130425", "130426", "130427", "130428", 
      "130429", "130430", "130431", "130432", "130433", "130434", 
      "130435", "130481", "130500", "130501", "130502", "130503", 
      "130521", "130522", "130523", "130524", "130525", "130526", 
      "130527", "130528", "130529", "130530", "130531", "130532", 
      "130533", "130534", "130535", "130581", "130582", "130600", 
      "130601", "130602", "130603", "130604", "130621", "130622", 
      "130623", "130624", "130625", "130626", "130627", "130628", 
      "130629", "130630", "130631", "130632", "130634", "130635", 
      "130636", "130637", "130638", "130681", "130682", "130683", 
      "130684", "130700", "130701", "130702", "130703", "130705", 
      "130706", "130721", "130722", "130723", "130724", "130725", 
      "130726", "130727", "130728", "130729", "130730", "130731", 
      "130732", "130733", "130800", "130801", "130802", "130803", 
      "130804", "130821", "130822", "130823", "130824", "130825", 
      "130826", "130827", "130828", "130900", "130901", "130902", 
      "130903", "130921", "130922", "130923", "130924", "130925", 
      "130926", "130927", "130928", "130929", "130930", "130981", 
      "130982", "130983", "130984", "131000", "131001", "131002", 
      "131003", "131022", "131023", "131024", "131025", "131026", 
      "131028", "131081", "131082", "131100", "131101", "131102", 
      "131121", "131122", "131123", "131124", "131125", "131126", 
      "131127", "131128", "131181", "131182", "140000", "140100", 
      "140101", "140105", "140106", "140107", "140108", "140109", 
      "140110", "140121", "140122", "140123", "140181", "140200", 
      "140201", "140202", "140203", "140211", "140212", "140221", 
      "140222", "140223", "140224", "140225", "140226", "140227", 
      "140300", "140301", "140302", "140303", "140311", "140321", 
      "140322", "140400", "140401", "140402", "140411", "140421", 
      "140423", "140424", "140425", "140426", "140427", "140428", 
      "140429", "140430", "140431", "140481", "140500", "140501", 
      "140502", "140521", "140522", "140524", "140525", "140581", 
      "140600", "140601", "140602", "140603", "140621", "140622", 
      "140623", "140624", "140700", "140701", "140702", "140721", 
      "140722", "140723", "140724", "140725", "140726", "140727", 
      "140728", "140729", "140781", "140800", "140801", "140802", 
      "140821", "140822", "140823", "140824", "140825", "140826", 
      "140827", "140828", "140829", "140830", "140881", "140882", 
      "140900", "140901", "140902", "140921", "140922", "140923", 
      "140924", "140925", "140926", "140927", "140928", "140929", 
      "140930", "140931", "140932", "140981", "141000", "141001", 
      "141002", "141021", "141022", "141023", "141024", "141025", 
      "141026", "141027", "141028", "141029", "141030", "141031", 
      "141032", "141033", "141034", "141081", "141082", "141100", 
      "141101", "141102", "141121", "141122", "141123", "141124", 
      "141125", "141126", "141127", "141128", "141129", "141130", 
      "141181", "141182", "150000", "150100", "150101", "150102", 
      "150103", "150104", "150105", "150121", "150122", "150123", 
      "150124", "150125", "150200", "150201", "150202", "150203", 
      "150204", "150205", "150206", "150207", "150221", "150222", 
      "150223", "150300", "150301", "150302", "150303", "150304", 
      "150400", "150401", "150402", "150403", "150404", "150421", 
      "150422", "150423", "150424", "150425", "150426", "150428", 
      "150429", "150430", "150500", "150501", "150502", "150521", 
      "150522", "150523", "150524", "150525", "150526", "150581", 
      "150600", "150602", "150621", "150622", "150623", "150624", 
      "150625", "150626", "150627", "150700", "150701", "150702", 
      "150721", "150722", "150723", "150724", "150725", "150726", 
      "150727", "150781", "150782", "150783", "150784", "150785", 
      "150800", "150801", "150802", "150821", "150822", "150823", 
      "150824", "150825", "150826", "150900", "150901", "150902", 
      "150921", "150922", "150923", "150924", "150925", "150926", 
      "150927", "150928", "150929", "150981", "152200", "152201", 
      "152202", "152221", "152222", "152223", "152224", "152500", 
      "152501", "152502", "152522", "152523", "152524", "152525", 
      "152526", "152527", "152528", "152529", "152530", "152531", 
      "152600", "152900", "152921", "152922", "152923", "210000", 
      "210100", "210101", "210102", "210103", "210104", "210105", 
      "210106", "210111", "210112", "210113", "210114", "210122", 
      "210123", "210124", "210181", "210200", "210201", "210202", 
      "210203", "210204", "210211", "210212", "210213", "210224", 
      "210281", "210282", "210283", "210300", "210301", "210302", 
      "210303", "210304", "210311", "210321", "210323", "210381", 
      "210400", "210401", "210402", "210403", "210404", "210411", 
      "210421", "210422", "210423", "210500", "210501", "210502", 
      "210503", "210504", "210505", "210521", "210522", "210600", 
      "210601", "210602", "210603", "210604", "210624", "210681", 
      "210682", "210700", "210701", "210702", "210703", "210711", 
      "210726", "210727", "210781", "210782", "210800", "210801", 
      "210802", "210803", "210804", "210811", "210881", "210882", 
      "210900", "210901", "210902", "210903", "210904", "210905", 
      "210911", "210921", "210922", "211000", "211001", "211002", 
      "211003", "211004", "211005", "211011", "211021", "211081", 
      "211100", "211101", "211102", "211103", "211121", "211122", 
      "211200", "211201", "211202", "211204", "211221", "211223", 
      "211224", "211281", "211282", "211300", "211301", "211302", 
      "211303", "211321", "211322", "211324", "211381", "211382", 
      "211400", "211401", "211402", "211403", "211404", "211421", 
      "211422", "211481", "220000", "220100", "220101", "220102", 
      "220103", "220104", "220105", "220106", "220112", "220122", 
      "220181", "220182", "220183", "220200", "220201", "220202", 
      "220203", "220204", "220211", "220221", "220281", "220282", 
      "220283", "220284", "220300", "220301", "220302", "220303", 
      "220322", "220323", "220381", "220382", "220400", "220401", 
      "220402", "220403", "220421", "220422", "220500", "220501", 
      "220502", "220503", "220521", "220523", "220524", "220581", 
      "220582", "220600", "220601", "220602", "220621", "220622", 
      "220623", "220625", "220681", "220700", "220701", "220702", 
      "220721", "220722", "220723", "220724", "220800", "220801", 
      "220802", "220821", "220822", "220881", "220882", "222400", 
      "222401", "222402", "222403", "222404", "222405", "222406", 
      "222424", "222426", "230000", "230100", "230101", "230102", 
      "230103", "230104", "230105", "230106", "230107", "230108", 
      "230121", "230123", "230124", "230125", "230126", "230127", 
      "230128", "230129", "230181", "230182", "230183", "230184", 
      "230200", "230201", "230202", "230203", "230204", "230205", 
      "230206", "230207", "230208", "230221", "230223", "230224", 
      "230225", "230227", "230229", "230230", "230231", "230281", 
      "230300", "230301", "230302", "230303", "230304", "230305", 
      "230306", "230307", "230321", "230381", "230382", "230400", 
      "230401", "230402", "230403", "230404", "230405", "230406", 
      "230407", "230421", "230422", "230500", "230501", "230502", 
      "230503", "230505", "230506", "230521", "230522", "230523", 
      "230524", "230600", "230601", "230602", "230603", "230604", 
      "230605", "230606", "230621", "230622", "230623", "230624", 
      "230700", "230701", "230702", "230703", "230704", "230705", 
      "230706", "230707", "230708", "230709", "230710", "230711", 
      "230712", "230713", "230714", "230715", "230716", "230722", 
      "230781", "230800", "230801", "230802", "230803", "230804", 
      "230805", "230811", "230822", "230826", "230828", "230833", 
      "230881", "230882", "230900", "230901", "230902", "230903", 
      "230904", "230921", "231000", "231001", "231002", "231003", 
      "231004", "231005", "231024", "231025", "231081", "231083", 
      "231084", "231085", "231100", "231101", "231102", "231121", 
      "231123", "231124", "231181", "231182", "231200", "231201", 
      "231202", "231221", "231222", "231223", "231224", "231225", 
      "231226", "231281", "231282", "231283", "232700", "232721", 
      "232722", "232723", "310000", "310100", "310101", "310103", 
      "310104", "310105", "310106", "310107", "310108", "310109", 
      "310110", "310112", "310113", "310114", "310115", "310116", 
      "310117", "310118", "310119", "310120", "310200", "310230", 
      "320000", "320100", "320101", "320102", "320103", "320104", 
      "320105", "320106", "320107", "320111", "320113", "320114", 
      "320115", "320116", "320124", "320125", "320200", "320201", 
      "320202", "320203", "320204", "320205", "320206", "320211", 
      "320281", "320282", "320300", "320301", "320302", "320303", 
      "320304", "320305", "320311", "320321", "320322", "320323", 
      "320324", "320381", "320382", "320400", "320401", "320402", 
      "320404", "320405", "320411", "320412", "320481", "320482", 
      "320500", "320501", "320502", "320503", "320504", "320505", 
      "320506", "320507", "320581", "320582", "320583", "320584", 
      "320585", "320600", "320601", "320602", "320611", "320621", 
      "320623", "320681", "320682", "320683", "320684", "320700", 
      "320701", "320703", "320705", "320706", "320721", "320722", 
      "320723", "320724", "320800", "320801", "320802", "320803", 
      "320804", "320811", "320826", "320829", "320830", "320831", 
      "320900", "320901", "320902", "320903", "320921", "320922", 
      "320923", "320924", "320925", "320981", "320982", "321000", 
      "321001", "321002", "321003", "321011", "321023", "321081", 
      "321084", "321088", "321100", "321101", "321102", "321111", 
      "321112", "321181", "321182", "321183", "321200", "321201", 
      "321202", "321203", "321281", "321282", "321283", "321284", 
      "321300", "321301", "321302", "321321", "321322", "321323", 
      "321324", "330000", "330100", "330101", "330102", "330103", 
      "330104", "330105", "330106", "330108", "330109", "330110", 
      "330122", "330127", "330182", "330183", "330185", "330200", 
      "330201", "330203", "330204", "330205", "330206", "330211", 
      "330212", "330225", "330226", "330281", "330282", "330283", 
      "330300", "330301", "330302", "330303", "330304", "330322", 
      "330324", "330326", "330327", "330328", "330329", "330381", 
      "330382", "330400", "330401", "330402", "330411", "330421", 
      "330424", "330481", "330482", "330483", "330500", "330501", 
      "330502", "330503", "330521", "330522", "330523", "330600", 
      "330601", "330602", "330621", "330624", "330681", "330682", 
      "330683", "330700", "330701", "330702", "330703", "330723", 
      "330726", "330727", "330781", "330782", "330783", "330784", 
      "330800", "330801", "330802", "330803", "330822", "330824", 
      "330825", "330881", "330900", "330901", "330902", "330903", 
      "330921", "330922", "331000", "331001", "331002", "331003", 
      "331004", "331021", "331022", "331023", "331024", "331081", 
      "331082", "331100", "331101", "331102", "331121", "331122", 
      "331123", "331124", "331125", "331126", "331127", "331181", 
      "340000", "340100", "340101", "340102", "340103", "340104", 
      "340111", "340121", "340122", "340123", "340200", "340201", 
      "340202", "340203", "340204", "340207", "340221", "340222", 
      "340223", "340300", "340301", "340302", "340303", "340304", 
      "340311", "340321", "340322", "340323", "340400", "340401", 
      "340402", "340403", "340404", "340405", "340406", "340421", 
      "340500", "340501", "340502", "340503", "340504", "340521", 
      "340600", "340601", "340602", "340603", "340604", "340621", 
      "340700", "340701", "340702", "340703", "340711", "340721", 
      "340800", "340801", "340802", "340803", "340811", "340822", 
      "340823", "340824", "340825", "340826", "340827", "340828", 
      "340881", "341000", "341001", "341002", "341003", "341004", 
      "341021", "341022", "341023", "341024", "341100", "341101", 
      "341102", "341103", "341122", "341124", "341125", "341126", 
      "341181", "341182", "341200", "341201", "341202", "341203", 
      "341204", "341221", "341222", "341225", "341226", "341282", 
      "341300", "341301", "341302", "341321", "341322", "341323", 
      "341324", "341400", "341401", "341402", "341421", "341422", 
      "341423", "341424", "341500", "341501", "341502", "341503", 
      "341521", "341522", "341523", "341524", "341525", "341600", 
      "341601", "341602", "341621", "341622", "341623", "341700", 
      "341701", "341702", "341721", "341722", "341723", "341800", 
      "341801", "341802", "341821", "341822", "341823", "341824", 
      "341825", "341881", "350000", "350100", "350101", "350102", 
      "350103", "350104", "350105", "350111", "350121", "350122", 
      "350123", "350124", "350125", "350128", "350181", "350182", 
      "350200", "350201", "350203", "350205", "350206", "350211", 
      "350212", "350213", "350300", "350301", "350302", "350303", 
      "350304", "350305", "350322", "350400", "350401", "350402", 
      "350403", "350421", "350423", "350424", "350425", "350426", 
      "350427", "350428", "350429", "350430", "350481", "350500", 
      "350501", "350502", "350503", "350504", "350505", "350521", 
      "350524", "350525", "350526", "350527", "350581", "350582", 
      "350583", "350600", "350601", "350602", "350603", "350622", 
      "350623", "350624", "350625", "350626", "350627", "350628", 
      "350629", "350681", "350700", "350701", "350702", "350721", 
      "350722", "350723", "350724", "350725", "350781", "350782", 
      "350783", "350784", "350800", "350801", "350802", "350821", 
      "350822", "350823", "350824", "350825", "350881", "350900", 
      "350901", "350902", "350921", "350922", "350923", "350924", 
      "350925", "350926", "350981", "350982", "360000", "360100", 
      "360101", "360102", "360103", "360104", "360105", "360111", 
      "360121", "360122", "360123", "360124", "360200", "360201", 
      "360202", "360203", "360222", "360281", "360300", "360301", 
      "360302", "360313", "360321", "360322", "360323", "360400", 
      "360401", "360402", "360403", "360421", "360423", "360424", 
      "360425", "360426", "360427", "360428", "360429", "360430", 
      "360481", "360500", "360501", "360502", "360521", "360600", 
      "360601", "360602", "360622", "360681", "360700", "360701", 
      "360702", "360721", "360722", "360723", "360724", "360725", 
      "360726", "360727", "360728", "360729", "360730", "360731", 
      "360732", "360733", "360734", "360735", "360781", "360782", 
      "360800", "360801", "360802", "360803", "360821", "360822", 
      "360823", "360824", "360825", "360826", "360827", "360828", 
      "360829", "360830", "360881", "360900", "360901", "360902", 
      "360921", "360922", "360923", "360924", "360925", "360926", 
      "360981", "360982", "360983", "361000", "361001", "361002", 
      "361021", "361022", "361023", "361024", "361025", "361026", 
      "361027", "361028", "361029", "361030", "361100", "361101", 
      "361102", "361121", "361122", "361123", "361124", "361125", 
      "361126", "361127", "361128", "361129", "361130", "361181", 
      "370000", "370100", "370101", "370102", "370103", "370104", 
      "370105", "370112", "370113", "370124", "370125", "370126", 
      "370181", "370200", "370201", "370202", "370203", "370205", 
      "370211", "370212", "370213", "370214", "370281", "370282", 
      "370283", "370284", "370285", "370300", "370301", "370302", 
      "370303", "370304", "370305", "370306", "370321", "370322", 
      "370323", "370400", "370401", "370402", "370403", "370404", 
      "370405", "370406", "370481", "370500", "370501", "370502", 
      "370503", "370521", "370522", "370523", "370600", "370601", 
      "370602", "370611", "370612", "370613", "370634", "370681", 
      "370682", "370683", "370684", "370685", "370686", "370687", 
      "370700", "370701", "370702", "370703", "370704", "370705", 
      "370724", "370725", "370781", "370782", "370783", "370784", 
      "370785", "370786", "370800", "370801", "370802", "370811", 
      "370826", "370827", "370828", "370829", "370830", "370831", 
      "370832", "370881", "370882", "370883", "370900", "370901", 
      "370902", "370903", "370921", "370923", "370982", "370983", 
      "371000", "371001", "371002", "371081", "371082", "371083", 
      "371100", "371101", "371102", "371121", "371122", "371200", 
      "371201", "371202", "371203", "371300", "371301", "371302", 
      "371311", "371312", "371321", "371322", "371323", "371324", 
      "371325", "371326", "371327", "371328", "371329", "371400", 
      "371401", "371402", "371421", "371422", "371423", "371424", 
      "371425", "371426", "371427", "371428", "371481", "371482", 
      "371500", "371501", "371502", "371521", "371522", "371523", 
      "371524", "371525", "371526", "371581", "371600", "371601", 
      "371602", "371621", "371622", "371623", "371624", "371625", 
      "371626", "371700", "371701", "371702", "371721", "371722", 
      "371723", "371724", "371725", "371726", "371727", "371728", 
      "410000", "410100", "410101", "410102", "410103", "410104", 
      "410105", "410106", "410108", "410122", "410181", "410182", 
      "410183", "410184", "410185", "410200", "410201", "410202", 
      "410203", "410204", "410205", "410211", "410221", "410222", 
      "410223", "410224", "410225", "410300", "410301", "410302", 
      "410303", "410304", "410305", "410306", "410307", "410322", 
      "410323", "410324", "410325", "410326", "410327", "410328", 
      "410329", "410381", "410400", "410401", "410402", "410403", 
      "410404", "410411", "410421", "410422", "410423", "410425", 
      "410481", "410482", "410500", "410501", "410502", "410503", 
      "410505", "410506", "410522", "410523", "410526", "410527", 
      "410581", "410600", "410601", "410602", "410603", "410611", 
      "410621", "410622", "410700", "410701", "410702", "410703", 
      "410704", "410711", "410721", "410724", "410725", "410726", 
      "410727", "410728", "410781", "410782", "410800", "410801", 
      "410802", "410803", "410804", "410811", "410821", "410822", 
      "410823", "410825", "410881", "410882", "410883", "410900", 
      "410901", "410902", "410922", "410923", "410926", "410927", 
      "410928", "411000", "411001", "411002", "411023", "411024", 
      "411025", "411081", "411082", "411100", "411101", "411102", 
      "411121", "411122", "411123", "411200", "411201", "411202", 
      "411221", "411222", "411224", "411281", "411282", "411300", 
      "411301", "411302", "411303", "411321", "411322", "411323", 
      "411324", "411325", "411326", "411327", "411328", "411329", 
      "411330", "411381", "411400", "411401", "411402", "411403", 
      "411421", "411422", "411423", "411424", "411425", "411426", 
      "411481", "411500", "411501", "411502", "411503", "411521", 
      "411522", "411523", "411524", "411525", "411526", "411527", 
      "411528", "411600", "411601", "411602", "411621", "411622", 
      "411623", "411624", "411625", "411626", "411627", "411628", 
      "411681", "411700", "411701", "411702", "411721", "411722", 
      "411723", "411724", "411725", "411726", "411727", "411728", 
      "411729", "420000", "420100", "420101", "420102", "420103", 
      "420104", "420105", "420106", "420107", "420111", "420112", 
      "420113", "420114", "420115", "420116", "420117", "420200", 
      "420201", "420202", "420203", "420204", "420205", "420222", 
      "420281", "420300", "420301", "420302", "420303", "420321", 
      "420322", "420323", "420324", "420325", "420381", "420500", 
      "420501", "420502", "420503", "420504", "420505", "420506", 
      "420525", "420526", "420527", "420528", "420529", "420581", 
      "420582", "420583", "420600", "420601", "420602", "420606", 
      "420607", "420624", "420625", "420626", "420682", "420683", 
      "420684", "420700", "420701", "420702", "420703", "420704", 
      "420800", "420801", "420802", "420804", "420821", "420822", 
      "420881", "420900", "420901", "420902", "420921", "420922", 
      "420923", "420981", "420982", "420984", "421000", "421001", 
      "421002", "421003", "421022", "421023", "421024", "421081", 
      "421083", "421087", "421100", "421101", "421102", "421121", 
      "421122", "421123", "421124", "421125", "421126", "421127", 
      "421181", "421182", "421200", "421201", "421202", "421221", 
      "421222", "421223", "421224", "421281", "421300", "421301", 
      "421302", "421381", "422800", "422801", "422802", "422822", 
      "422823", "422825", "422826", "422827", "422828", "429000", 
      "429004", "429005", "429006", "429021", "430000", "430100", 
      "430101", "430102", "430103", "430104", "430105", "430111", 
      "430121", "430122", "430124", "430181", "430200", "430201", 
      "430202", "430203", "430204", "430211", "430221", "430223", 
      "430224", "430225", "430281", "430300", "430301", "430302", 
      "430304", "430321", "430381", "430382", "430400", "430401", 
      "430405", "430406", "430407", "430408", "430412", "430421", 
      "430422", "430423", "430424", "430426", "430481", "430482", 
      "430500", "430501", "430502", "430503", "430511", "430521", 
      "430522", "430523", "430524", "430525", "430527", "430528", 
      "430529", "430581", "430600", "430601", "430602", "430603", 
      "430611", "430621", "430623", "430624", "430626", "430681", 
      "430682", "430700", "430701", "430702", "430703", "430721", 
      "430722", "430723", "430724", "430725", "430726", "430781", 
      "430800", "430801", "430802", "430811", "430821", "430822", 
      "430900", "430901", "430902", "430903", "430921", "430922", 
      "430923", "430981", "431000", "431001", "431002", "431003", 
      "431021", "431022", "431023", "431024", "431025", "431026", 
      "431027", "431028", "431081", "431100", "431101", "431102", 
      "431103", "431121", "431122", "431123", "431124", "431125", 
      "431126", "431127", "431128", "431129", "431200", "431201", 
      "431202", "431221", "431222", "431223", "431224", "431225", 
      "431226", "431227", "431228", "431229", "431230", "431281", 
      "431300", "431301", "431302", "431321", "431322", "431381", 
      "431382", "433100", "433101", "433122", "433123", "433124", 
      "433125", "433126", "433127", "433130", "440000", "440100", 
      "440101", "440102", "440103", "440104", "440105", "440106", 
      "440107", "440111", "440112", "440113", "440114", "440183", 
      "440184", "440200", "440201", "440202", "440203", "440204", 
      "440221", "440222", "440224", "440229", "440232", "440233", 
      "440281", "440282", "440300", "440301", "440303", "440304", 
      "440305", "440306", "440307", "440308", "440400", "440401", 
      "440402", "440403", "440404", "440500", "440501", "440507", 
      "440511", "440512", "440513", "440514", "440515", "440523", 
      "440600", "440601", "440604", "440605", "440606", "440607", 
      "440608", "440700", "440701", "440703", "440704", "440705", 
      "440781", "440783", "440784", "440785", "440800", "440801", 
      "440802", "440803", "440804", "440811", "440823", "440825", 
      "440881", "440882", "440883", "440900", "440901", "440902", 
      "440903", "440923", "440981", "440982", "440983", "441200", 
      "441201", "441202", "441203", "441223", "441224", "441225", 
      "441226", "441283", "441284", "441300", "441301", "441302", 
      "441303", "441322", "441323", "441324", "441400", "441401", 
      "441402", "441421", "441422", "441423", "441424", "441426", 
      "441427", "441481", "441500", "441501", "441502", "441521", 
      "441523", "441581", "441600", "441601", "441602", "441621", 
      "441622", "441623", "441624", "441625", "441700", "441701", 
      "441702", "441721", "441723", "441781", "441800", "441801", 
      "441802", "441821", "441823", "441825", "441826", "441827", 
      "441881", "441882", "441900", "442000", "445100", "445101", 
      "445102", "445121", "445122", "445200", "445201", "445202", 
      "445221", "445222", "445224", "445281", "445300", "445301", 
      "445302", "445321", "445322", "445323", "445381", "450000", 
      "450100", "450101", "450102", "450103", "450104", "450105", 
      "450106", "450121", "450122", "450123", "450124", "450125", 
      "450126", "450127", "450200", "450201", "450202", "450203", 
      "450204", "450205", "450221", "450222", "450223", "450224", 
      "450225", "450226", "450300", "450301", "450302", "450303", 
      "450304", "450305", "450311", "450321", "450322", "450323", 
      "450324", "450325", "450326", "450327", "450328", "450329", 
      "450330", "450331", "450332", "450400", "450401", "450403", 
      "450404", "450405", "450421", "450422", "450423", "450481", 
      "450500", "450501", "450502", "450503", "450512", "450521", 
      "450600", "450601", "450602", "450603", "450621", "450681", 
      "450700", "450701", "450702", "450703", "450721", "450722", 
      "450800", "450801", "450802", "450803", "450804", "450821", 
      "450881", "450900", "450901", "450902", "450921", "450922", 
      "450923", "450924", "450981", "451000", "451001", "451002", 
      "451021", "451022", "451023", "451024", "451025", "451026", 
      "451027", "451028", "451029", "451030", "451031", "451100", 
      "451101", "451102", "451121", "451122", "451123", "451200", 
      "451201", "451202", "451221", "451222", "451223", "451224", 
      "451225", "451226", "451227", "451228", "451229", "451281", 
      "451300", "451301", "451302", "451321", "451322", "451323", 
      "451324", "451381", "451400", "451401", "451402", "451421", 
      "451422", "451423", "451424", "451425", "451481", "460000", 
      "460100", "460101", "460105", "460106", "460107", "460108", 
      "460200", "460201", "469000", "469001", "469002", "469003", 
      "469005", "469006", "469007", "469025", "469026", "469027", 
      "469028", "469030", "469031", "469033", "469034", "469035", 
      "469036", "469037", "469038", "469039", "500000", "500100", 
      "500101", "500102", "500103", "500104", "500105", "500106", 
      "500107", "500108", "500109", "500110", "500111", "500112", 
      "500113", "500114", "500115", "500200", "500222", "500223", 
      "500224", "500225", "500226", "500227", "500228", "500229", 
      "500230", "500231", "500232", "500233", "500234", "500235", 
      "500236", "500237", "500238", "500240", "500241", "500242", 
      "500243", "500300", "500381", "500382", "500383", "500384", 
      "510000", "510100", "510101", "510104", "510105", "510106", 
      "510107", "510108", "510112", "510113", "510114", "510115", 
      "510121", "510122", "510124", "510129", "510131", "510132", 
      "510181", "510182", "510183", "510184", "510300", "510301", 
      "510302", "510303", "510304", "510311", "510321", "510322", 
      "510400", "510401", "510402", "510403", "510411", "510421", 
      "510422", "510500", "510501", "510502", "510503", "510504", 
      "510521", "510522", "510524", "510525", "510600", "510601", 
      "510603", "510623", "510626", "510681", "510682", "510683", 
      "510700", "510701", "510703", "510704", "510722", "510723", 
      "510724", "510725", "510726", "510727", "510781", "510800", 
      "510801", "510802", "510811", "510812", "510821", "510822", 
      "510823", "510824", "510900", "510901", "510903", "510904", 
      "510921", "510922", "510923", "511000", "511001", "511002", 
      "511011", "511024", "511025", "511028", "511100", "511101", 
      "511102", "511111", "511112", "511113", "511123", "511124", 
      "511126", "511129", "511132", "511133", "511181", "511300", 
      "511301", "511302", "511303", "511304", "511321", "511322", 
      "511323", "511324", "511325", "511381", "511400", "511401", 
      "511402", "511421", "511422", "511423", "511424", "511425", 
      "511500", "511501", "511502", "511521", "511522", "511523", 
      "511524", "511525", "511526", "511527", "511528", "511529", 
      "511600", "511601", "511602", "511621", "511622", "511623", 
      "511681", "511700", "511701", "511702", "511721", "511722", 
      "511723", "511724", "511725", "511781", "511800", "511801", 
      "511802", "511821", "511822", "511823", "511824", "511825", 
      "511826", "511827", "511900", "511901", "511902", "511921", 
      "511922", "511923", "512000", "512001", "512002", "512021", 
      "512022", "512081", "513200", "513221", "513222", "513223", 
      "513224", "513225", "513226", "513227", "513228", "513229", 
      "513230", "513231", "513232", "513233", "513300", "513321", 
      "513322", "513323", "513324", "513325", "513326", "513327", 
      "513328", "513329", "513330", "513331", "513332", "513333", 
      "513334", "513335", "513336", "513337", "513338", "513400", 
      "513401", "513422", "513423", "513424", "513425", "513426", 
      "513427", "513428", "513429", "513430", "513431", "513432", 
      "513433", "513434", "513435", "513436", "513437", "520000", 
      "520100", "520101", "520102", "520103", "520111", "520112", 
      "520113", "520114", "520121", "520122", "520123", "520181", 
      "520200", "520201", "520203", "520221", "520222", "520300", 
      "520301", "520302", "520303", "520321", "520322", "520323", 
      "520324", "520325", "520326", "520327", "520328", "520329", 
      "520330", "520381", "520382", "520400", "520401", "520402", 
      "520421", "520422", "520423", "520424", "520425", "522200", 
      "522201", "522222", "522223", "522224", "522225", "522226", 
      "522227", "522228", "522229", "522230", "522300", "522301", 
      "522322", "522323", "522324", "522325", "522326", "522327", 
      "522328", "522400", "522401", "522422", "522423", "522424", 
      "522425", "522426", "522427", "522428", "522600", "522601", 
      "522622", "522623", "522624", "522625", "522626", "522627", 
      "522628", "522629", "522630", "522631", "522632", "522633", 
      "522634", "522635", "522636", "522700", "522701", "522702", 
      "522722", "522723", "522725", "522726", "522727", "522728", 
      "522729", "522730", "522731", "522732", "530000", "530100", 
      "530101", "530102", "530103", "530111", "530112", "530113", 
      "530121", "530122", "530124", "530125", "530126", "530127", 
      "530128", "530129", "530181", "530300", "530301", "530302", 
      "530321", "530322", "530323", "530324", "530325", "530326", 
      "530328", "530381", "530400", "530401", "530402", "530421", 
      "530422", "530423", "530424", "530425", "530426", "530427", 
      "530428", "530500", "530501", "530502", "530521", "530522", 
      "530523", "530524", "530600", "530601", "530602", "530621", 
      "530622", "530623", "530624", "530625", "530626", "530627", 
      "530628", "530629", "530630", "530700", "530701", "530702", 
      "530721", "530722", "530723", "530724", "530800", "530801", 
      "530802", "530821", "530822", "530823", "530824", "530825", 
      "530826", "530827", "530828", "530829", "530900", "530901", 
      "530902", "530921", "530922", "530923", "530924", "530925", 
      "530926", "530927", "532300", "532301", "532322", "532323", 
      "532324", "532325", "532326", "532327", "532328", "532329", 
      "532331", "532500", "532501", "532502", "532522", "532523", 
      "532524", "532525", "532526", "532527", "532528", "532529", 
      "532530", "532531", "532532", "532600", "532621", "532622", 
      "532623", "532624", "532625", "532626", "532627", "532628", 
      "532800", "532801", "532822", "532823", "532900", "532901", 
      "532922", "532923", "532924", "532925", "532926", "532927", 
      "532928", "532929", "532930", "532931", "532932", "533100", 
      "533102", "533103", "533122", "533123", "533124", "533300", 
      "533321", "533323", "533324", "533325", "533400", "533421", 
      "533422", "533423", "540000", "540100", "540101", "540102", 
      "540121", "540122", "540123", "540124", "540125", "540126", 
      "540127", "542100", "542121", "542122", "542123", "542124", 
      "542125", "542126", "542127", "542128", "542129", "542132", 
      "542133", "542200", "542221", "542222", "542223", "542224", 
      "542225", "542226", "542227", "542228", "542229", "542231", 
      "542232", "542233", "542300", "542301", "542322", "542323", 
      "542324", "542325", "542326", "542327", "542328", "542329", 
      "542330", "542331", "542332", "542333", "542334", "542335", 
      "542336", "542337", "542338", "542400", "542421", "542422", 
      "542423", "542424", "542425", "542426", "542427", "542428", 
      "542429", "542430", "542500", "542521", "542522", "542523", 
      "542524", "542525", "542526", "542527", "542600", "542621", 
      "542622", "542623", "542624", "542625", "542626", "542627", 
      "610000", "610100", "610101", "610102", "610103", "610104", 
      "610111", "610112", "610113", "610114", "610115", "610116", 
      "610122", "610124", "610125", "610126", "610200", "610201", 
      "610202", "610203", "610204", "610222", "610300", "610301", 
      "610302", "610303", "610304", "610322", "610323", "610324", 
      "610326", "610327", "610328", "610329", "610330", "610331", 
      "610400", "610401", "610402", "610403", "610404", "610422", 
      "610423", "610424", "610425", "610426", "610427", "610428", 
      "610429", "610430", "610431", "610481", "610500", "610501", 
      "610502", "610521", "610522", "610523", "610524", "610525", 
      "610526", "610527", "610528", "610581", "610582", "610600", 
      "610601", "610602", "610621", "610622", "610623", "610625", 
      "610626", "610627", "610628", "610629", "610630", "610631", 
      "610632", "610700", "610701", "610702", "610721", "610722", 
      "610723", "610724", "610725", "610726", "610727", "610728", 
      "610729", "610730", "610800", "610801", "610802", "610821", 
      "610822", "610823", "610824", "610825", "610826", "610827", 
      "610828", "610829", "610830", "610831", "610900", "610901", 
      "610902", "610921", "610922", "610923", "610924", "610925", 
      "610926", "610927", "610928", "610929", "611000", "611001", 
      "611002", "611021", "611022", "611023", "611024", "611025", 
      "611026", "620000", "620100", "620101", "620102", "620103", 
      "620104", "620105", "620111", "620121", "620122", "620123", 
      "620200", "620201", "620300", "620301", "620302", "620321", 
      "620400", "620401", "620402", "620403", "620421", "620422", 
      "620423", "620500", "620501", "620502", "620503", "620521", 
      "620522", "620523", "620524", "620525", "620600", "620601", 
      "620602", "620621", "620622", "620623", "620700", "620701", 
      "620702", "620721", "620722", "620723", "620724", "620725", 
      "620800", "620801", "620802", "620821", "620822", "620823", 
      "620824", "620825", "620826", "620900", "620901", "620902", 
      "620921", "620922", "620923", "620924", "620981", "620982", 
      "621000", "621001", "621002", "621021", "621022", "621023", 
      "621024", "621025", "621026", "621027", "621100", "621101", 
      "621102", "621121", "621122", "621123", "621124", "621125", 
      "621126", "622600", "622621", "622623", "622624", "622625", 
      "622626", "622627", "622628", "622629", "622630", "622900", 
      "622901", "622921", "622922", "622923", "622924", "622925", 
      "622926", "622927", "623000", "623001", "623021", "623022", 
      "623023", "623024", "623025", "623026", "623027", "630000", 
      "630100", "630101", "630102", "630103", "630104", "630105", 
      "630121", "630122", "630123", "632100", "632121", "632122", 
      "632123", "632126", "632127", "632128", "632200", "632221", 
      "632222", "632223", "632224", "632300", "632321", "632322", 
      "632323", "632324", "632500", "632521", "632522", "632523", 
      "632524", "632525", "632600", "632621", "632622", "632623", 
      "632624", "632625", "632626", "632700", "632721", "632722", 
      "632723", "632724", "632725", "632726", "632800", "632801", 
      "632802", "632821", "632822", "632823", "640000", "640100", 
      "640101", "640104", "640105", "640106", "640122", "640181", 
      "640200", "640201", "640202", "640205", "640221", "640300", 
      "640301", "640302", "640323", "640324", "640381", "640400", 
      "640401", "640402", "640422", "640423", "640424", "640425", 
      "640500", "640501", "640502", "640521", "640522", "650000", 
      "650100", "650101", "650102", "650103", "650104", "650105", 
      "650106", "650107", "650108", "650121", "650200", "650201", 
      "650202", "650203", "650204", "650205", "652100", "652101", 
      "652122", "652123", "652200", "652201", "652222", "652223", 
      "652300", "652301", "652302", "652303", "652323", "652324", 
      "652325", "652327", "652328", "652700", "652701", "652722", 
      "652723", "652800", "652801", "652822", "652823", "652824", 
      "652825", "652826", "652827", "652828", "652829", "652900", 
      "652901", "652922", "652923", "652924", "652925", "652926", 
      "652927", "652928", "652929", "653000", "653001", "653022", 
      "653023", "653024", "653100", "653101", "653121", "653122", 
      "653123", "653124", "653125", "653126", "653127", "653128", 
      "653129", "653130", "653131", "653200", "653201", "653221", 
      "653222", "653223", "653224", "653225", "653226", "653227", 
      "654000", "654002", "654003", "654021", "654022", "654023", 
      "654024", "654025", "654026", "654027", "654028", "654200", 
      "654201", "654202", "654221", "654223", "654224", "654225", 
      "654226", "654300", "654301", "654321", "654322", "654323", 
      "654324", "654325", "654326", "659000", "659001", "659002", 
      "659003", "659004" };
	  return getareaCodes;
	} 
	
	//生成生日
	public static String getBirthday(){
		String[] areaCodes = getareaCodes();
		Random random = new Random();
		String areaCode = areaCodes[random.nextInt(areaCodes.length)];
		int year = 1977 + random.nextInt(22);
		//int year = 2017;
		int month = random.nextInt(11);
		if (month == 0)
		  month = 12;
		int day = 0;
		do
		  day = random.nextInt(31);
		while ((day == 0) || ((((month == 4) || (month == 6) || (month == 9) || (month == 11))) && ((
		  (day > 30) || ((month == 2) && ((((year % 4 > 0) && (day > 28)) || (
		  day > 29))))))));
		return String.valueOf(year * 10000 + month * 100 + day);
	}
	//身份证校验码
    public static String getVerify(String cardId)
    {
		String[] ValCodeArr = { "1", "0", "X", "9", "8", "7", "6", "5", "4", 
		"3", "2" };
		String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", 
		"9", "10", "5", "8", "4", "2" };
		int TotalmulAiWi = 0;
		for (int i = 0; i < 17; ++i)
		{
		  TotalmulAiWi = TotalmulAiWi + 
			Integer.parseInt(String.valueOf(cardId.charAt(i))) * 
			Integer.parseInt(Wi[i]);
		}
		int modValue = TotalmulAiWi % 11;
		String strVerifyCode = ValCodeArr[modValue];

		return strVerifyCode;
    }
  
    //生成身份证号码
	public static String idno(){
		String[] areaCodes = getareaCodes();
		Random random = new Random();
		String areaCode = areaCodes[random.nextInt(areaCodes.length)];
		String birthday = getBirthday();
		String randomCode = String.valueOf(1000 + random.nextInt(999)).substring(1);
		String verify = getVerify(areaCode + birthday + randomCode);
		String ret = areaCode + birthday + randomCode + verify;
		return ret;
	}
	
	//生成写在图片上的信息
	public Map<String,String> Calculate()
	{
		String ret = idno();
		String birthday = getBirthday();
		String sex = ret.substring(16, 17);
		int i = Integer.parseInt(sex);
		if (i % 2 == 0)
			sex = "女";//M
		else {
			sex = "男";//F
		}
		HashMap<String,String> result = new HashMap<String,String>();
		result.put("IdCardNo",ret); //生成身份证号
		result.put("year",birthday.substring(0,4));
		result.put("month",birthday.substring(4,6));
		result.put("day",birthday.substring(6,8));
		result.put("sex",sex);
		return result;//"IdCardNo:" + ret + "," + "birthday:" + birthday + "," + "sex:" + sex;
	}

///生成身份证号码结束
	//校验是否有效身份证
	public static boolean isAvail(String idno){
		
		//先检验前6位
		String[] areaCodes = getareaCodes();
		for(String areaCode : areaCodes){
			if(idno.substring(0,6).equals(areaCode)){
				判断生日//
				//获取系统当前日期
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
				String systemDate = df.format(new Date());// new Date()为获取当前系统时间
				String birthday = idno.substring(6,14);
				//如果年份大于当前系统的年份,那么就是无效或者身份证年龄大于100岁,视为无效,
				//if(Integer.valueOf(birthday.substring(0,4))>Integer.valueOf(systemDate.substring(0,4)) | Integer.valueOf(systemDate.substring(0,4)) - Integer.valueOf(birthday.substring(0,4)) > 100) return false;
				//最后的校验码,应该不用校验生日,直接校验这个校验码即可
				if(idno.substring(17,18).equals(getVerify(idno.substring(0,18)))){
					return  true;
				}
			} 
		}
		return false;
	}
	//指定身份证号码
	public void defineIdno(Map<String,String> result,String idno){
		result.put("IdCardNo",idno);//更改身份证
		result.put("year",idno.substring(6,10));//更改年
		result.put("month",idno.substring(10,12));//更改月
		result.put("day",idno.substring(12,14));//更改日
	}
	
	//读取配置文件
	public static String getPropertyFile(String filePath,String key) throws IOException{
		Properties  pp = new Properties();
		try{
			pp.load(new BufferedReader(new FileReader(new File(filePath))));
		}catch(IOException e){
			throw e;
		}
		return pp.getProperty(key);
	}
	
	//名字--身份证号对应集合,名字,身份证都需要指定
	public static Map<String,String> nameAndIdnoCollections(String[] sourceDatasOfName,String[] sourceDatasOfIdno){
		//idno为key,name为value
		Map<String,String> name_idno = new HashMap<String,String>();
		int count = 0 ;
		for(String idno:sourceDatasOfIdno){
			
			if(sourceDatasOfName.length<sourceDatasOfIdno.length){//如果名字的个数少于身份证个数
				if(count > sourceDatasOfName.length){ //那么当名字与身份证一一匹配完毕时,剩余的所有身份证号都匹配最后一个名字
					name_idno.put(idno,sourceDatasOfName[count]);
				}else{   //名字与身份证一一匹配
					name_idno.put(idno,sourceDatasOfName[count++]);
				}
			}else{
				name_idno.put(idno,sourceDatasOfName[count++]);
			}
		}
		if(sourceDatasOfName.length != sourceDatasOfIdno.length) System.out.println("由于有效身份证号只有" + count + "个,所以只能生成" + count + "张身份证图片");
		return name_idno;
	}
	
	//批量生成随机身份证,只需指定名字即可
/*	public static Map<String,String> nameAndIdnoCollections(String[] sourceDatasOfName){
		//idno为key,name为value
		Map<String,String> name_idno = new HashMap<String,String>();
		for(String name:sourceDatasOfName){
			String idno = idno();
			name_idno.put(idno,name);
		}
		return name_idno;
	}
*/	
	//生成身份证图片
	public static void idno_picture(IdnoPic tt,String name,Map<String,String> result){
		String fileName = ".\\output\\" + name + ".jpg";
		BufferedImage d = tt.loadImageLocal(".\\sfzzm.jpg"); 
		BufferedImage b = tt.loadImageLocal(".\\touxiang.jpg"); 	
		//合并图片		
	    tt.writeImageLocal(fileName, tt.modifyImagetogeter(b, d)); 
		//往图片上写文件 
		tt.writeImageLocal(fileName,tt.modifyImage(d,"深圳市福田区金田路荣超大厦",75,143)); //住址
		
		tt.writeImageLocal(fileName,tt.modifyImage(d,name,75,53)); //姓名
		tt.writeImageLocal(fileName,tt.modifyImage(d,result.get("sex"),75,83)); //性别
		tt.writeImageLocal(fileName,tt.modifyImage(d,"汉",158,83)); //民族
		tt.writeImageLocal(fileName,tt.modifyImage(d,result.get("year")+"     " + result.get("month") + "    " + result.get("day"),75,113)); //出生年月
		tt.writeImageLocal(fileName,tt.modifyImage(d,result.get("IdCardNo"),133,220)); //身份证号
	}
	
	
	///随机生成名字开始/
	 
	public static int randomPositon(int length){
        Random r = new Random();
        return r.nextInt(length);
    }
    
	//生成名字
    public static String randomName(){
		String[] firstName = { "赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯",
				"陈", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "许", "何", "吕", "施",
				"张", "孔", "曹", "严", "华", "金", "魏", "陶", "云", "苏", "范", "彭",
				"乐", "于", "时", "傅", "皮", "齐", "康", "梅", "林", "刁", "钟", "徐",
				"邱", "骆" };
        String[] secondName = { "一", "乙", "二", "十", "丁", "厂", "七", "卜", "人", "入",
				"八", "九", "几", "儿", "了", "力", "乃", "刀", "又", "三", "于", "干",
				"亏", "士", "工", "土", "才", "寸", "下", "大", "丈", "与", "万", "上",
				"小", "口", "巾", "山", "千", "乞", "川", "亿", "个", "勺", "久", "凡",
				"及", "夕", "丸", "么", "广", "亡", "门", "义", "之", "尸", "弓", "己",
				"已", "子", "卫", "也", "女", "飞", "刃", "习", "叉", "马", "乡", "丰",
				"王", "井", "开", "夫", "天", "无", "元", "专", "云", "扎", "艺", "木",
				"五", "支", "厅", "不", "太", "犬", "区", "历", "尤", "友", "匹", "车",
				"巨", "牙", "屯", "比", "互", "切", "瓦", "止", "少", "日", "中", "冈",
				"贝", "内", "水", "见", "午", "牛", "手", "毛", "气", "升", "长", "仁",
				"什", "片", "仆", "化", "仇", "币", "仍", "仅", "斤", "爪", "反", "介",
				"父", "从", "今", "凶", "分", "乏", "公", "仓", "月", "氏", "勿", "欠",
				"风", "丹", "匀", "乌", "凤", "勾", "文", "六", "方", "火", "为", "斗",
				"忆", "订", "计", "户", "认", "心", "尺", "引", "丑", "巴", "孔", "队",
				"办", "以", "允", "予", "劝", "双", "书", "幻", "玉", "刊", "示", "末",
				"未", "击", "打", "巧", "正", "扑", "扒", "功", "扔", "去", "甘", "世",
				"古", "节", "本", "术", "可", "丙", "左", "厉", "右", "石", "布", "龙",
				"平", "灭", "轧", "东", "卡", "北", "占", "业", "旧", "帅", "归", "且",
				"旦", "目", "叶", "甲", "申", "叮", "电", "号", "田", "由", "史", "只",
				"央", "兄", "叼", "叫", "另", "叨", "叹", "四", "生", "失", "禾", "丘",
				"付", "仗", "代", "仙", "们", "仪", "白", "仔", "他", "斥", "瓜", "乎",
				"丛", "令", "用", "甩", "印", "乐", "句", "匆", "册", "犯", "外", "处",
				"冬", "鸟", "务", "包", "饥", "主", "市", "立", "闪", "兰", "半", "汁",
				"汇", "头", "汉", "宁", "穴", "它", "讨", "写", "让", "礼", "训", "必",
				"议", "讯", "记", "永", "司", "尼", "民", "出", "辽", "奶", "奴", "加",
				"召", "皮", "边", "发", "孕", "圣", "对", "台", "矛", "纠", "母", "幼",
				"丝", "式", "刑", "动", "扛", "寺", "吉", "扣", "考", "托", "老", "执",
				"巩", "圾", "扩", "扫", "地", "扬", "场", "耳", "共", "芒", "亚", "芝",
				"朽", "朴", "机", "权", "过", "臣", "再", "协", "西", "压", "厌", "在",
				"有", "百", "存", "而", "页", "匠", "夸", "夺", "灰", "达", "列", "死",
				"成", "夹", "轨", "邪", "划", "迈", "毕", "至", "此", "贞", "师", "尘",
				"尖", "劣", "光", "当", "早", "吐", "吓", "虫", "曲", "团", "同", "吊",
				"吃", "因", "吸", "吗", "屿", "帆", "岁", "回", "岂", "刚", "则", "肉",
				"网", "年", "朱", "先", "丢", "舌", "竹", "迁", "乔", "伟", "传", "乒",
				"乓", "休", "伍", "伏", "优", "伐", "延", "件", "任", "伤", "价", "份",
				"华", "仰", "仿", "伙", "伪", "自", "血", "向", "似", "后", "行", "舟",
				"全", "会", "杀", "合", "兆", "企", "众", "爷", "伞", "创", "肌", "朵",
				"杂", "危", "旬", "旨", "负", "各", "名", "多", "争", "色", "壮", "冲",
				"冰", "庄", "庆", "亦", "刘", "齐", "交", "次", "衣", "产", "决", "充",
				"妄", "闭", "问", "闯", "羊", "并", "关", "米", "灯", "州", "汗", "污",
				"江", "池", "汤", "忙", "兴", "宇", "守", "宅", "字", "安", "讲", "军",
				"许", "论", "农", "讽", "设", "访", "寻", "那", "迅", "尽", "导", "异",
				"孙", "阵", "阳", "收", "阶", "阴", "防", "奸", "如", "妇", "好", "她",
				"妈", "戏", "羽", "观", "欢", "买", "红", "纤", "级", "约", "纪", "驰",
				"巡", "寿", "弄", "麦", "形", "进", "戒", "吞", "远", "违", "运", "扶",
				"抚", "坛", "技", "坏", "扰", "拒", "找", "批", "扯", "址", "走", "抄",
				"坝", "贡", "攻", "赤", "折", "抓", "扮", "抢", "孝", "均", "抛", "投",
				"坟", "抗", "坑", "坊", "抖", "护", "壳", "志", "扭", "块", "声", "把",
				"报", "却", "劫", "芽", "花", "芹", "芬", "苍", "芳", "严", "芦", "劳",
				"克", "苏", "杆", "杠", "杜", "材", "村", "杏", "极", "李", "杨", "求",
				"更", "束", "豆", "两", "丽", "医", "辰", "励", "否", "还", "歼", "来",
				"连", "步", "坚", "旱", "盯", "呈", "时", "吴", "助", "县", "里", "呆",
				"园", "旷", "围", "呀", "吨", "足", "邮", "男", "困", "吵", "串", "员",
				"听", "吩", "吹", "呜", "吧", "吼", "别", "岗", "帐", "财", "针", "钉",
				"告", "我", "乱", "利", "秃", "秀", "私", "每", "兵", "估", "体", "何",
				"但", "伸", "作", "伯", "伶", "佣", "低", "你", "住", "位", "伴", "身",
				"皂", "佛", "近", "彻", "役", "返", "余", "希", "坐", "谷", "妥", "含",
				"邻", "岔", "肝", "肚", "肠", "龟", "免", "狂", "犹", "角", "删", "条",
				"卵", "岛", "迎", "饭", "饮", "系", "言", "冻", "状", "亩", "况", "床",
				"库", "疗", "应", "冷", "这", "序", "辛", "弃", "冶", "忘", "闲", "间",
				"闷", "判", "灶", "灿", "弟", "汪", "沙", "汽", "沃", "泛", "沟", "没",
				"沈", "沉", "怀", "忧", "快", "完", "宋", "宏", "牢", "究", "穷", "灾",
				"良", "证", "启", "评", "补", "初", "社", "识", "诉", "诊", "词", "译",
				"君", "灵", "即", "层", "尿", "尾", "迟", "局", "改", "张", "忌", "际",
				"陆", "阿", "陈", "阻", "附", "妙", "妖", "妨", "努", "忍", "劲", "鸡",
				"驱", "纯", "纱", "纳", "纲", "驳", "纵", "纷", "纸", "纹", "纺", "驴",
				"纽", "奉", "玩", "环", "武", "青", "责", "现", "表", "规", "抹", "拢",
				"拔", "拣", "担", "坦", "押", "抽", "拐", "拖", "拍", "者", "顶", "拆",
				"拥", "抵", "拘", "势", "抱", "垃", "拉", "拦", "拌", "幸", "招", "坡",
				"披", "拨", "择", "抬", "其", "取", "苦", "若", "茂", "苹", "苗", "英",
				"范", "直", "茄", "茎", "茅", "林", "枝", "杯", "柜", "析", "板", "松",
				"枪", "构", "杰", "述", "枕", "丧", "或", "画", "卧", "事", "刺", "枣",
				"雨", "卖", "矿", "码", "厕", "奔", "奇", "奋", "态", "欧", "垄", "妻",
				"轰", "顷", "转", "斩", "轮", "软", "到", "非", "叔", "肯", "齿", "些",
				"虎", "虏", "肾", "贤", "尚", "旺", "具", "果", "味", "昆", "国", "昌",
				"畅", "明", "易", "昂", "典", "固", "忠", "咐", "呼", "鸣", "咏", "呢",
				"岸", "岩", "帖", "罗", "帜", "岭", "凯", "败", "贩", "购", "图", "钓",
				"制", "知", "垂", "牧", "物", "乖", "刮", "秆", "和", "季", "委", "佳",
				"侍", "供", "使", "例", "版", "侄", "侦", "侧", "凭", "侨", "佩", "货",
				"依", "的", "迫", "质", "欣", "征", "往", "爬", "彼", "径", "所", "舍",
				"金", "命", "斧", "爸", "采", "受", "乳", "贪", "念", "贫", "肤", "肺",
				"肢", "肿", "胀", "朋", "股", "肥", "服", "胁", "周", "昏", "鱼", "兔",
				"狐", "忽", "狗", "备", "饰", "饱", "饲", "变", "京", "享", "店", "夜",
				"庙", "府", "底", "剂", "郊", "废", "净", "盲", "放", "刻", "育", "闸",
				"闹", "郑", "券", "卷", "单", "炒", "炊", "炕", "炎", "炉", "沫", "浅",
				"法", "泄", "河", "沾", "泪", "油", "泊", "沿", "泡", "注", "泻", "泳",
				"泥", "沸", "波", "泼", "泽", "治", "怖", "性", "怕", "怜", "怪", "学",
				"宝", "宗", "定", "宜", "审", "宙", "官", "空", "帘", "实", "试", "郎",
				"诗", "肩", "房", "诚", "衬", "衫", "视", "话", "诞", "询", "该", "详",
				"建", "肃", "录", "隶", "居", "届", "刷", "屈", "弦", "承", "孟", "孤",
				"陕", "降", "限", "妹", "姑", "姐", "姓", "始", "驾", "参", "艰", "线",
				"练", "组", "细", "驶", "织", "终", "驻", "驼", "绍", "经", "贯", "奏",
				"春", "帮", "珍", "玻", "毒", "型", "挂", "封", "持", "项", "垮", "挎",
				"城", "挠", "政", "赴", "赵", "挡", "挺", "括", "拴", "拾", "挑", "指",
				"垫", "挣", "挤", "拼", "挖", "按", "挥", "挪", "某", "甚", "革", "荐",
				"巷", "带", "草", "茧", "茶", "荒", "茫", "荡", "荣", "故", "胡", "南",
				"药", "标", "枯", "柄", "栋", "相", "查", "柏", "柳", "柱", "柿", "栏",
				"树", "要", "咸", "威", "歪", "研", "砖", "厘", "厚", "砌", "砍", "面",
				"耐", "耍", "牵", "残", "殃", "轻", "鸦", "皆", "背", "战", "点", "临",
				"览", "竖", "省", "削", "尝", "是", "盼", "眨", "哄", "显", "哑", "冒",
				"映", "星", "昨", "畏", "趴", "胃", "贵", "界", "虹", "虾", "蚁", "思",
				"蚂", "虽", "品", "咽", "骂", "哗", "咱", "响", "哈", "咬", "咳", "哪",
				"炭", "峡", "罚", "贱", "贴", "骨", "钞", "钟", "钢", "钥", "钩", "卸",
				"缸", "拜", "看", "矩", "怎", "牲", "选", "适", "秒", "香", "种", "秋",
				"科", "重", "复", "竿", "段", "便", "俩", "贷", "顺", "修", "保", "促",
				"侮", "俭", "俗", "俘", "信", "皇", "泉", "鬼", "侵", "追", "俊", "盾",
				"待", "律", "很", "须", "叙", "剑", "逃", "食", "盆", "胆", "胜", "胞",
				"胖", "脉", "勉", "狭", "狮", "独", "狡", "狱", "狠", "贸", "怨", "急",
				"饶", "蚀", "饺", "饼", "弯", "将", "奖", "哀", "亭", "亮", "度", "迹",
				"庭", "疮", "疯", "疫", "疤", "姿", "亲", "音", "帝", "施", "闻", "阀",
				"阁", "差", "养", "美", "姜", "叛", "送", "类", "迷", "前", "首", "逆",
				"总", "炼", "炸", "炮", "烂", "剃", "洁", "洪", "洒", "浇", "浊", "洞",
				"测", "洗", "活", "派", "洽", "染", "济", "洋", "洲", "浑", "浓", "津",
				"恒", "恢", "恰", "恼", "恨", "举", "觉", "宣", "室", "宫", "宪", "突",
				"穿", "窃", "客", "冠", "语", "扁", "袄", "祖", "神", "祝", "误", "诱",
				"说", "诵", "垦", "退", "既", "屋", "昼", "费", "陡", "眉", "孩", "除",
				"险", "院", "娃", "姥", "姨", "姻", "娇", "怒", "架", "贺", "盈", "勇",
				"怠", "柔", "垒", "绑", "绒", "结", "绕", "骄", "绘", "给", "络", "骆",
				"绝", "绞", "统", "耕", "耗", "艳", "泰", "珠", "班", "素", "蚕", "顽",
				"盏", "匪", "捞", "栽", "捕", "振", "载", "赶", "起", "盐", "捎", "捏",
				"埋", "捉", "捆", "捐", "损", "都", "哲", "逝", "捡", "换", "挽", "热",
				"恐", "壶", "挨", "耻", "耽", "恭", "莲", "莫", "荷", "获", "晋", "恶",
				"真", "框", "桂", "档", "桐", "株", "桥", "桃", "格", "校", "核", "样",
				"根", "索", "哥", "速", "逗", "栗", "配", "翅", "辱", "唇", "夏", "础",
				"破", "原", "套", "逐", "烈", "殊", "顾", "轿", "较", "顿", "毙", "致",
				"柴", "桌", "虑", "监", "紧", "党", "晒", "眠", "晓", "鸭", "晃", "晌",
				"晕", "蚊", "哨", "哭", "恩", "唤", "啊", "唉", "罢", "峰", "圆", "贼",
				"贿", "钱", "钳", "钻", "铁", "铃", "铅", "缺", "氧", "特", "牺", "造",
				"乘", "敌", "秤", "租", "积", "秧", "秩", "称", "秘", "透", "笔", "笑",
				"笋", "债", "借", "值", "倚", "倾", "倒", "倘", "俱", "倡", "候", "俯",
				"倍", "倦", "健", "臭", "射", "躬", "息", "徒", "徐", "舰", "舱", "般",
				"航", "途", "拿", "爹", "爱", "颂", "翁", "脆", "脂", "胸", "胳", "脏",
				"胶", "脑", "狸", "狼", "逢", "留", "皱", "饿", "恋", "桨", "浆", "衰",
				"高", "席", "准", "座", "脊", "症", "病", "疾", "疼", "疲", "效", "离",
				"唐", "资", "凉", "站", "剖", "竞", "部", "旁", "旅", "畜", "阅", "羞",
				"瓶", "拳", "粉", "料", "益", "兼", "烤", "烘", "烦", "烧", "烛", "烟",
				"递", "涛", "浙", "涝", "酒", "涉", "消", "浩", "海", "涂", "浴", "浮",
				"流", "润", "浪", "浸", "涨", "烫", "涌", "悟", "悄", "悔", "悦", "害",
				"宽", "家", "宵", "宴", "宾", "窄", "容", "宰", "案", "请", "朗", "诸",
				"读", "扇", "袜", "袖", "袍", "被", "祥", "课", "谁", "调", "冤", "谅",
				"谈", "谊", "剥", "恳", "展", "剧", "屑", "弱", "陵", "陶", "陷", "陪",
				"娱", "娘", "通", "能", "难", "预", "桑", "绢", "绣", "验", "继", "球",
				"理", "捧", "堵", "描", "域", "掩", "捷", "排", "掉", "堆", "推", "掀",
				"授", "教", "掏", "掠", "培", "接", "控", "探", "据", "掘", "职", "基",
				"著", "勒", "黄", "萌", "萝", "菌", "菜", "萄", "菊", "萍", "菠", "营",
				"械", "梦", "梢", "梅", "检", "梳", "梯", "桶", "救", "副", "票", "戚",
				"爽", "聋", "袭", "盛", "雪", "辅", "辆", "虚", "雀", "堂", "常", "匙",
				"晨", "睁", "眯", "眼", "悬", "野", "啦", "晚", "啄", "距", "跃", "略",
				"蛇", "累", "唱", "患", "唯", "崖", "崭", "崇", "圈", "铜", "铲", "银",
				"甜", "梨", "犁", "移", "笨", "笼", "笛", "符", "第", "敏", "做", "袋",
				"悠", "偿", "偶", "偷", "您", "售", "停", "偏", "假", "得", "衔", "盘",
				"船", "斜", "盒", "鸽", "悉", "欲", "彩", "领", "脚", "脖", "脸", "脱",
				"象", "够", "猜", "猪", "猎", "猫", "猛", "馅", "馆", "凑", "减", "毫",
				"麻", "痒", "痕", "廊", "康", "庸", "鹿", "盗", "章", "竟", "商", "族",
				"旋", "望", "率", "着", "盖", "粘", "粗", "粒", "断", "剪", "兽", "清",
				"添", "淋", "淹", "渠", "渐", "混", "渔", "淘", "液", "淡", "深", "婆",
				"梁", "渗", "情", "惜", "惭", "悼", "惧", "惕", "惊", "惨", "惯", "寇",
				"寄", "宿", "窑", "密", "谋", "谎", "祸", "谜", "逮", "敢", "屠", "弹",
				"随", "蛋", "隆", "隐", "婚", "婶", "颈", "绩", "绪", "续", "骑", "绳",
				"维", "绵", "绸", "绿", "琴", "斑", "替", "款", "堪", "搭", "塔", "越",
				"趁", "趋", "超", "提", "堤", "博", "揭", "喜", "插", "揪", "搜", "煮",
				"援", "裁", "搁", "搂", "搅", "握", "揉", "斯", "期", "欺", "联", "散",
				"惹", "葬", "葛", "董", "葡", "敬", "葱", "落", "朝", "辜", "葵", "棒",
				"棋", "植", "森", "椅", "椒", "棵", "棍", "棉", "棚", "棕", "惠", "惑",
				"逼", "厨", "厦", "硬", "确", "雁", "殖", "裂", "雄", "暂", "雅", "辈",
				"悲", "紫", "辉", "敞", "赏", "掌", "晴", "暑", "最", "量", "喷", "晶",
				"喇", "遇", "喊", "景", "践", "跌", "跑", "遗", "蛙", "蛛", "蜓", "喝",
				"喂", "喘", "喉", "幅", "帽", "赌", "赔", "黑", "铸", "铺", "链", "销",
				"锁", "锄", "锅", "锈", "锋", "锐", "短", "智", "毯", "鹅", "剩", "稍",
				"程", "稀", "税", "筐", "等", "筑", "策", "筛", "筒", "答", "筋", "筝",
				"傲", "傅", "牌", "堡", "集", "焦", "傍", "储", "奥", "街", "惩", "御",
				"循", "艇", "舒", "番", "释", "禽", "腊", "脾", "腔", "鲁", "猾", "猴",
				"然", "馋", "装", "蛮", "就", "痛", "童", "阔", "善", "羡", "普", "粪",
				"尊", "道", "曾", "焰", "港", "湖", "渣", "湿", "温", "渴", "滑", "湾",
				"渡", "游", "滋", "溉", "愤", "慌", "惰", "愧", "愉", "慨", "割", "寒",
				"富", "窜", "窝", "窗", "遍", "裕", "裤", "裙", "谢", "谣", "谦", "属",
				"屡", "强", "粥", "疏", "隔", "隙", "絮", "嫂", "登", "缎", "缓", "编",
				"骗", "缘", "瑞", "魂", "肆", "摄", "摸", "填", "搏", "塌", "鼓", "摆",
				"携", "搬", "摇", "搞", "塘", "摊", "蒜", "勤", "鹊", "蓝", "墓", "幕",
				"蓬", "蓄", "蒙", "蒸", "献", "禁", "楚", "想", "槐", "榆", "楼", "概",
				"赖", "酬", "感", "碍", "碑", "碎", "碰", "碗", "碌", "雷", "零", "雾",
				"雹", "输", "督", "龄", "鉴", "睛", "睡", "睬", "鄙", "愚", "暖", "盟",
				"歇", "暗", "照", "跨", "跳", "跪", "路", "跟", "遣", "蛾", "蜂", "嗓",
				"置", "罪", "罩", "错", "锡", "锣", "锤", "锦", "键", "锯", "矮", "辞",
				"稠", "愁", "筹", "签", "简", "毁", "舅", "鼠", "催", "傻", "像", "躲",
				"微", "愈", "遥", "腰", "腥", "腹", "腾", "腿", "触", "解", "酱", "痰",
				"廉", "新", "韵", "意", "粮", "数", "煎", "塑", "慈", "煤", "煌", "满",
				"漠", "源", "滤", "滥", "滔", "溪", "溜", "滚", "滨", "粱", "滩", "慎",
				"誉", "塞", "谨", "福", "群", "殿", "辟", "障", "嫌", "嫁", "叠", "缝",
				"缠", "静", "碧", "璃", "墙", "撇", "嘉", "摧", "截", "誓", "境", "摘",
				"摔", "聚", "蔽", "慕", "暮", "蔑", "模", "榴", "榜", "榨", "歌", "遭",
				"酷", "酿", "酸", "磁", "愿", "需", "弊", "裳", "颗", "嗽", "蜻", "蜡",
				"蝇", "蜘", "赚", "锹", "锻", "舞", "稳", "算", "箩", "管", "僚", "鼻",
				"魄", "貌", "膜", "膊", "膀", "鲜", "疑", "馒", "裹", "敲", "豪", "膏",
				"遮", "腐", "瘦", "辣", "竭", "端", "旗", "精", "歉", "熄", "熔", "漆",
				"漂", "漫", "滴", "演", "漏", "慢", "寨", "赛", "察", "蜜", "谱", "嫩",
				"翠", "熊", "凳", "骡", "缩", "慧", "撕", "撒", "趣", "趟", "撑", "播",
				"撞", "撤", "增", "聪", "鞋", "蕉", "蔬", "横", "槽", "樱", "橡", "飘",
				"醋", "醉", "震", "霉", "瞒", "题", "暴", "瞎", "影", "踢", "踏", "踩",
				"踪", "蝶", "蝴", "嘱", "墨", "镇", "靠", "稻", "黎", "稿", "稼", "箱",
				"箭", "篇", "僵", "躺", "僻", "德", "艘", "膝", "膛", "熟", "摩", "颜",
				"毅", "糊", "遵", "潜", "潮", "懂", "额", "慰", "劈", "操", "燕", "薯",
				"薪", "薄", "颠", "橘", "整", "融", "醒", "餐", "嘴", "蹄", "器", "赠",
				"默", "镜", "赞", "篮", "邀", "衡", "膨", "雕", "磨", "凝", "辨", "辩",
				"糖", "糕", "燃", "澡", "激", "懒", "壁", "避", "缴", "戴", "擦", "鞠",
				"藏", "霜", "霞", "瞧", "蹈", "螺", "穗", "繁", "辫", "赢", "糟", "糠",
				"燥", "臂", "骤", "鞭", "覆", "蹦", "镰", "翻", "鹰", "警", "攀", "蹲",
				"颤", "瓣", "爆", "疆", "壤", "耀", "躁", "嚼", "嚷", "籍", "魔", "灌",
				"蠢", "霸", "露", "囊", "罐", "相关" };
		
		return firstName[randomPositon(firstName.length)]+secondName[randomPositon(secondName.length)];
	}
	随机生成名字结束
	public static void main(String[] args) { 
		IdnoPic tt = new IdnoPic(); 
		Map<String,String> result = tt.Calculate();
		System.out.println("");
		System.out.println("1.随机;2.指定身份证号码;1p.随机批量;2p.指定批量");
			
		Scanner className = new Scanner(System.in);
		String classNo = className.nextLine();
		String name = "";
		while(!classNo.equals("1") && !classNo.equals("2") && !classNo.equals("1p") && !classNo.equals("2p")&&!classNo.equals("?")){
			System.out.println("输入不正确,请重新输入1或者2,并回车:");
			classNo = className.nextLine();
		}
		switch(classNo){
			case "1":
				name = randomName();//输入姓名
				idno_picture(tt,name,result);
				System.out.println(name + ":" + result.get("IdCardNo"));
				System.out.print("随机");
				break;
			case "2":
				Scanner scan = new Scanner(System.in);
				System.out.println("请输入18位有效身份证,并回车~!");
				String tempIdno = new Scanner(System.in).nextLine();
				while(tempIdno.length()!=18 || isAvail(tempIdno) == false){
					System.out.println("请重新输入18位有效身份证,并回车~!");
					tempIdno = new Scanner(System.in).nextLine();
				}
				System.out.println("请输入姓名,并回车:");
				scan = new Scanner(System.in);
				name = scan.nextLine();//输入姓名
				tt.defineIdno(result,tempIdno);
				idno_picture(tt,name,result);
				System.out.println(name + ":" + result.get("IdCardNo"));
				System.out.print("指定");
				break;
			case "1p":
				System.out.println("请输出生成的数量,并回车:");
				scan = new Scanner(System.in);
				int count = scan.nextInt();
				try{
					String[] names = getPropertyFile(".\\idinfo.properties","name").split(",");
				}catch(IOException e){
					System.out.println("从配置文件中读取身份证信息出错~!");
					e.printStackTrace();
				}catch(NullPointerException enull){System.out.println("从配置文件中读取身份证信息出错~!");}
				//HashMap<String,String> name_idnos = (HashMap)nameAndIdnoCollections(names);
				for(int i=1;i<=count;i++/*Map.Entry<String,String> name_idno:name_idnos.entrySet()*/){
					name = randomName();//name_idno.getValue().replaceAll("\\p{Punct}","");//输入姓名
					result = tt.Calculate();
					idno_picture(tt,name,result);
					System.out.println(name + ":" + result.get("IdCardNo"));
				}
				System.out.print(count +"张");
				break;
			case "2p":
				try{
					String[] name2s = getPropertyFile(".\\idinfo.properties","name").split(",");
					String[] idno2s = getPropertyFile(".\\idinfo.properties","idno").split(",");
					HashMap<String,String> name_idno2s = (HashMap<String,String>)nameAndIdnoCollections(name2s,idno2s);
					count = 0;
					for(Map.Entry<String,String> name_idno:name_idno2s.entrySet()){
						name = name_idno.getValue().replaceAll("\\p{Punct}","");//输入姓名
						result = tt.Calculate();
						String tempIdno2p = name_idno.getKey().replaceAll("\\p{Punct}","");
						if(isAvail(tempIdno2p) == false){
							System.out.println("身份证号码:" + tempIdno2p + "无效~!");
							count ++;
							continue;
						}
						tt.defineIdno(result,tempIdno2p);
						idno_picture(tt,name,result);
						System.out.println(name + ":" + result.get("IdCardNo"));
					}
					if(count>0) System.out.println(count + "张身份证无效");
					System.out.print(name_idno2s.size()-count +"张");
				}catch(IOException e ){
					System.out.println("从配置文件中读取身份证信息出错~!");
					e.printStackTrace();
				}catch(NullPointerException enull){System.out.println("从配置文件中读取身份证信息出错~!");}
				break;
			case "?":
				String[] instructions = {};
				try{
					instructions = getPropertyFile(".\\idinfo.properties","instructions").split("!");
					for(String outText:instructions){
						System.out.println(outText.replaceAll("\"",""));
					}
				}catch(IOException e){
				}catch(NullPointerException enull){
				}finally{
					if(instructions.length<=0){
					System.out.println("标签1:输入1,并回车。会在当前目录output文件夹中随机生成一个身份证;");
					System.out.println("标签2:输入2,并回车。提示输入有效身份证和姓名,完成之后,会在当前目录output文件夹中随机生成一个身份证;");
					System.out.println("标签1p:输入2p,并回车。提示输入生成的数量,完成之后,会在当前目录output文件夹中随机生成指定数量的身份证;");
					System.out.println("标签2p:需先在当前目录中的properties文件中填写需要指定生成的身份证和对应的姓名,配置完成后,输入2p,并回车。会在当前目录output文件夹中生成生成与有效的身份证号数量一致的身份证图片;");
					}
				}				
		}
		if(!classNo.equals("?")) System.out.println("身份证生成成功~!"); 
	  } 
}

IdnoPic.bat批处理文件

@echo off
echo "如果需要批量【指定】生成,请先在properties文件中配置对应的名字和身份证号;"
echo "请输入以下其中一个标签,并回车,若需要帮助请输入'?',并回车:"
:1
javac -Xlint:unchecked -encoding utf8 ".\IdnoPic.java"
cd ".\"
java IdnoPic

pause
goto 1

最终运行效果:

 

参考:http://www.jb51.net/article/97161.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值