项目要求产生一些模拟的中文姓名,我的想法是先产生姓氏,再随机产生名字,可以是两个字的也可以是三个字的。使用的是

GB2312实现的中文字,可自行百度“信息交换用汉字编码字符集”了解一下这种编码对汉字的安排。我这里简单写一下我的理解。

汉字以两个字节存储,称为“区位码”,高位叫区码,低位叫位码,有这俩字节组成汉字。假设有一张汉字表,横竖都是 94列,那么区码就相当于行,位码就相当于列,根据行列就可以确定一个汉字了,这有点像二位数组==,GB2312大致就是按照这种方式实现的,区码1~9即前9行放的是特殊字符,16~55区放的是一级汉字,56~87区放的是二级汉字,其余的暂时空余。为了区别中文与西文字母,在中文字符首位以1开头区分以0开头的ASCII码,GB2312给每个中文字符加上0xA0,因此,区码从0xB0-0xF7 都是汉字,位码范围0xA0-0xFE 。

import java.io.UnsupportedEncodingException;
import java.util.Random;public class ChineseName {public static void main(String[] args) {Random random=new Random(System.currentTimeMillis());/* 598 百家姓 */String[] Surname= {"赵","钱","孙","李","周","吴","郑","王","冯","陈","褚","卫","蒋","沈","韩","杨","朱","秦","尤","许","何","吕","施","张","孔","曹","严","华","金","魏","陶","姜","戚","谢","邹","喻","柏","水","窦","章","云","苏","潘","葛","奚","范","彭","郎","鲁","韦","昌","马","苗","凤","花","方","俞","任","袁","柳","酆","鲍","史","唐","费","廉","岑","薛","雷","贺","倪","汤","滕","殷","罗","毕","郝","邬","安","常","乐","于","时","傅","皮","卞","齐","康","伍","余","元","卜","顾","孟","平","黄","和","穆","萧","尹","姚","邵","湛","汪","祁","毛","禹","狄","米","贝","明","臧","计","伏","成","戴","谈","宋","茅","庞","熊","纪","舒","屈","项","祝","董","梁","杜","阮","蓝","闵","席","季","麻","强","贾","路","娄","危","江","童","颜","郭","梅","盛","林","刁","钟","徐","邱","骆","高","夏","蔡","田","樊","胡","凌","霍","虞","万","支","柯","昝","管","卢","莫","经","房","裘","缪","干","解","应","宗","丁","宣","贲","邓","郁","单","杭","洪","包","诸","左","石","崔","吉","钮","龚","程","嵇","邢","滑","裴","陆","荣","翁","荀","羊","于","惠","甄","曲","家","封","芮","羿","储","靳","汲","邴","糜","松","井","段","富","巫","乌","焦","巴","弓","牧","隗","山","谷","车","侯","宓","蓬","全","郗","班","仰","秋","仲","伊","宫","宁","仇","栾","暴","甘","钭","厉","戎","祖","武","符","刘","景","詹","束","龙","叶","幸","司","韶","郜","黎","蓟","溥","印","宿","白","怀","蒲","邰","从","鄂","索","咸","籍","赖","卓","蔺","屠","蒙","池","乔","阴","郁","胥","能","苍","双","闻","莘","党","翟","谭","贡","劳","逄","姬","申","扶","堵","冉","宰","郦","雍","却","璩","桑","桂","濮","牛","寿","通","边","扈","燕","冀","浦","尚","农","温","别","庄","晏","柴","瞿","阎","充","慕","连","茹","习","宦","艾","鱼","容","向","古","易","慎","戈","廖","庾","终","暨","居","衡","步","都","耿","满","弘","匡","国","文","寇","广","禄","阙","东","欧","殳","沃","利","蔚","越","夔","隆","师","巩","厍","聂","晁","勾","敖","融","冷","訾","辛","阚","那","简","饶","空","曾","毋","沙","乜","养","鞠","须","丰","巢","关","蒯","相","查","后","荆","红","游","郏","竺","权","逯","盖","益","桓","公","仉","督","岳","帅","缑","亢","况","郈","有","琴","归","海","晋","楚","闫","法","汝","鄢","涂","钦","商","牟","佘","佴","伯","赏","墨","哈","谯","篁","年","爱","阳","佟","言","福","南","火","铁","迟","漆","官","冼","真","展","繁","檀","祭","密","敬","揭","舜","楼","疏","冒","浑","挚","胶","随","高","皋","原","种","练","弥","仓","眭","蹇","覃","阿","门","恽","来","綦","召","仪","风","介","巨","木","京","狐","郇","虎","枚","抗","达","杞","苌","折","麦","庆","过","竹","端","鲜","皇","亓","老","是","秘","畅","邝","还","宾","闾","辜","纵","侴","万俟","司马","上官","欧阳","夏侯","诸葛","闻人","东方","赫连","皇甫","羊舌","尉迟","公羊","澹台","公冶","宗正","濮阳","淳于","单于","太叔","申屠","公孙","仲孙","轩辕","令狐","钟离","宇文","长孙","慕容","鲜于","闾丘","司徒","司空","兀官","司寇","南门","呼延","子车","颛孙","端木","巫马","公西","漆雕","车正","壤驷","公良","拓跋","夹谷","宰父","谷梁","段干","百里","东郭","微生","梁丘","左丘","东门","西门","南宫","第五","公仪","公乘","太史","仲长","叔孙","屈突","尔朱","东乡","相里","胡母","司城","张廖","雍门","毋丘","贺兰","綦毋","屋庐","独孤","南郭","北宫","王孙"};int index=random.nextInt(Surname.length-1);     String name = Surname[index]; //获得一个随机的姓氏/* 从常用字中选取一个或两个字作为名 */if(random.nextBoolean()){name+=getChinese()+getChinese();}else {name+=getChinese();}System.out.println(name);}public static String getChinese() {String str = null;int highPos, lowPos;Random random = new Random();highPos = (176 + Math.abs(random.nextInt(71)));//区码,0xA0打头,从第16区开始,即0xB0=11*16=176,16~55一级汉字,56~87二级汉字random=new Random();lowPos = 161 + Math.abs(random.nextInt(94));//位码,0xA0打头,范围第1~94列byte[] bArr = new byte[2];bArr[0] = (new Integer(highPos)).byteValue();bArr[1] = (new Integer(lowPos)).byteValue();try {str = new String(bArr, "GB2312");   //区位码组合成汉字} catch (UnsupportedEncodingException e) {e.printStackTrace();}return str;}}

上面产生的还是比较随机的姓名,需要筛选一下才能使用==,为了提高可靠性,可以从三个方向下手一是提高普遍姓氏如张王李赵的频率,二是只使用一级汉字,因为这些字比较常见,三是可以加入一些常见的名字如伟,明,静,月,斌,磊作为一个名字数组的候选方案,这样可以更加真实一些,有兴趣的朋友可以尝试一下。

分享促进社会进步~~

Java 中文姓名随机生成相关推荐

  1. java随机生成中文昵称_Java 中文姓名随机生成

    项目要求产生一些模拟的中文姓名,我的想法是先产生姓氏,再随机产生名字,可以是两个字的也可以是三个字的.使用的是 GB2312实现的中文字,可自行百度"信息交换用汉字编码字符集"了解 ...

  2. Java开源 之随机生成中文姓名,手机号,邮编,住址

    import java.util.HashMap; import java.util.Map;/*** 随机生成中文姓名,性别,Email,手机号,住址*/ public class RandomVa ...

  3. java实现:随机生成小写字母,并判断是元音还是辅音

    java实现: 随机生成小写字母,并判断是元音还是辅音 用switch进行判断,然后把switch放入for循环 package com.word.word;//随机生成小写字母,并判断是元音还是辅音 ...

  4. python3 姓名随机生成脚本--random.randrange()用法

    首先先准备一个形式的词库,我这里用了一个列表和一些简单的姓氏: ###508个常用姓氏 xing_shi = ["赵","钱","孙",&q ...

  5. Java小程序--随机生成50道加减法算数题

    程序概述: 通过窗体随机生成50道加减法算数题并显示.用户可以做该50道算术题,做完提交系统之后,系统会给出用户的正确率.用户可以重置这50道算术题. 界面显示: 程序设计基本思路: (1)首先顺序建 ...

  6. Java编程:随机生成数字串

    介绍两种随机生成数字串的方法,该方法生成的随机串,小概率情况下会产生重复值,因此该方法只可用于生成验证码,不可以用于生成数字串类型的主键.后续会写一篇关于生成不重复的数字串的文章.如有不正之处,欢迎批 ...

  7. java 随机生成简单中文_用java语言实现随机生成中文姓名

    中文字符一般使用的编码格式为"GB2312",那么gb2312到底是什么,简单介绍一下(参考百度百科) GB2312 一般指信息交换用汉字编码字符集. <信息交换用汉字编码字 ...

  8. Java基础之随机生成数字和字母

    字母与数字的ASCII码 目 前计算机中用得最广泛的 字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information I ...

  9. java中的随机生成算法_随机生成算法的java代码太复杂了

    public static Integer[] generateRandomArray(int n, int rangeL, int rangeR) { assert rangeL <= ran ...

  10. java算法:随机生成英文单词表快速查询含有和不含有的单词(不考虑大小写)

    列如输入字符串a,就会查询所有含a的单词和不含有a的单词,输入ab就会查询有a和b package test5; import java.util.ArrayList; import java.uti ...

最新文章

  1. import android.view.window;,尝试在空对象引用上调用虚拟方法‘android.view.Window$回调...
  2. Android 指纹调试流程(高通、MTK均适用)
  3. 怎么退出mysql_如何安全地关闭MySQL
  4. dnf机械机器人补丁_大熊家资金记账软件
  5. c51语言的数据存储模式,第5章项目三单片机存储结构及C51语言.ppt
  6. weblogic查看版本号教程
  7. 天瑞地安科技集团:APP软件如何优化
  8. 【虹科免费直播预告】光电技术直播月重磅来袭!
  9. oracle预收核销,Oracle EBS AP 应付核销到确定一行预付款
  10. 【2G模组Air202开发】使用LuatTools下载Luat底层Lod及编写第一个程序:流水灯
  11. 第三方接入-飞猪酒店商品发布流程
  12. html5图片漂浮代码,QQ空间免费漂浮代码怎么搞啊
  13. 怎样治愈游走性神经痛,游走性神经痛能治愈吗
  14. 无法卸载vue2.x提示up to date
  15. 如何选择企业级数据存储DAS、NAS和SAN
  16. 修改vscode左侧目录字体大小
  17. GhSAD1基因调节棉花的冷应激反应
  18. Unsupported or unrecognized SSL message
  19. 批量将XPS转成Word的免费方法
  20. GNSS数据下载网站

热门文章

  1. PMP第三节:项目管理过程
  2. 紫猫插件-网络共享数据(16-18)
  3. 第九章 SG90伺服舵机模块的使用
  4. 在不同场景里,用户使用手机时的认知水平和操作绩效
  5. dns配置异常怎么修复_DNS错误怎么办(如何正确设置DNS)
  6. 我对计算机基础的认识,我对计算机的认识
  7. 期货交易常用术语中英文对照表
  8. 东西向流量/南北向流量
  9. 旋转变换(二)欧拉角
  10. JSON数据乱码解决方法