用C/C++生成随机中文名字

今天写了个这个功能,有点粗糙,可能会有很多地方要修改,分享下:

  1 #include <stdio.h>
  2 #include <windows.h>
  3 #include <time.h>
  4
  5 //499个   0-498,百家姓
  6 const char NameHead[500][10] = {"赵","钱","孙","李",.....}
  7 //322个,词语
  8 const char Name2[323][10]= {"骄奢","荫庇","芳馨",...}
  9 //52个,大小写字母
 10 const char Name3[53][4] = {"A","B","C","D","E",....}
 11
 12 //名字长度
 13 #define NAME_LENGTH 6
 14
 15 //修改随机步长
 16 VOID SetSrand()
 17 {
 18     static ULONG timeindex = 0;
 19     srand((int)time(0) + timeindex);
 20     timeindex += 0x3;
 21     if(timeindex > 0xfffffff)
 22     {
 23         timeindex = 0;
 24     }
 25 }
 26 //获取随机数
 27 int GetRand(int rval)
 28 {
 29     return (int)(rand() % rval);
 30 }
 31
 32 void getRandName(PCHAR randName)
 33 {
 34     int cnt = 0;
 35     SetSrand();
 36     //srand((unsigned)time(NULL));
 37     int iRange1 = 0xf7 - 0xb0;
 38     int iRange2 = 0xfe - 0xa1;
 39     //40%概率
 40     if(GetRand(100)<=40){
 41
 42         //printf("1-百家姓+随机字:");
 43         //姓
 44         cnt = GetRand(sizeof(NameHead)/sizeof(NameHead[0])-1);
 45         lstrcat(randName,NameHead[cnt]);
 46         //名
 47         cnt = NAME_LENGTH - (strlen(randName)/2);
 48         //cnt = rand()%(sizeof(CouArry)/sizeof(int));
 49
 50         for (int i=0;i<cnt;++i)
 51         {
 52
 53             BYTE iCode1 = GetRand(iRange1) + 0xb0;
 54
 55             BYTE iCode2 = GetRand(iRange2) + 0xa1;
 56             char ch[3] = {iCode1,iCode2,0};
 57             lstrcat(randName,ch);
 58
 59         }
 60
 61     }else if (GetRand(100)<=25)
 62     {
 63         //25%概率
 64         //printf("2-词+随机字:");
 65
 66         //姓
 67         cnt = GetRand(sizeof(Name2)/sizeof(Name2[0])-1);
 68         lstrcat(randName,Name2[cnt]);
 69
 70         //名
 71         cnt = NAME_LENGTH - (strlen(randName)/2);
 72
 73         for (int i=0;i<cnt;++i)
 74         {
 75             //尾巴,1/5概率有
 76             if (GetRand(5)==1)
 77             {
 78                 lstrcat(randName,Name3[GetRand(sizeof(Name3)/sizeof(Name3[0])-1)]);
 79             }else{
 80                 BYTE iCode1 = GetRand(iRange1) + 0xb0;
 81
 82                 BYTE iCode2 = GetRand(iRange2) + 0xa1;
 83                 char ch[3] = {iCode1,iCode2,0};
 84                 lstrcat(randName,ch);
 85             }
 86
 87         }
 88
 89
 90
 91     }else{
 92         //printf("3-百家姓+词+随机字+字母:");
 93         //姓
 94
 95         cnt = GetRand(sizeof(NameHead)/sizeof(NameHead[0])-1);
 96         lstrcat(randName,NameHead[cnt]);
 97         //名
 98
 99         cnt = GetRand(sizeof(Name2)/sizeof(Name2[0])-1);
100
101         lstrcat(randName,Name2[cnt]);
102
103         //cnt = NAME_LENGTH - (strlen(randName)/2);
104
105         if ((strlen(randName)/2 < NAME_LENGTH))
106         {
107             cnt = NAME_LENGTH - (strlen(randName)/2);
108             for (int i = 0;i<cnt;i++)
109             {
110                 if (GetRand(5)==1)
111                 {
112                     BYTE iCode1 = GetRand(iRange1) + 0xb0;
113
114                     BYTE iCode2 = GetRand(iRange2) + 0xa1;
115                     char ch[3] = {iCode1,iCode2,0};
116                     lstrcat(randName,ch);
117
118                 }else{
119                     lstrcat(randName,Name3[GetRand(sizeof(Name3)/sizeof(Name3[0])-1)]);
120                 }
121
122             }
123
124         }
125     }
126
127
128
129 }
130
131
132 int main()
133 {
134
135     char Name[20] = {0};
136     FILE* f = NULL;
137
138     f = fopen("c:\\log\\name.txt","w+");
139     //100个随机名字
140     for(int i = 0;i<100;i++)
141     {
142         strset(Name,0);
143         getRandName(Name);
144         printf("---------%d:%s\r\n",(i+1),Name);
145
146         fprintf(f,"%s\r\n",Name);
147         Sleep(10);
148
149
150     }
151
152
153     getchar();
154 }

写的还不够智能,希望以后能多多补充,多多提炼下自己

时间: 2024-10-14 20:35:51

用C/C++生成随机中文名字的相关文章

C# 写的一个生成随机汉语名字的小程序

最近因为要做数据库相关的测试,频繁使用到测试数据,手动添加太过于麻烦,而且复用性太差,因此干脆花了点时间写了一个生成随机姓名和相关数据的类,贴在这里,有需用的同志们可以参考一下.代码本身质量不好,也不算规范,各取所需莫要取笑-.- public class GetRandomName { private static string firstName = @"赵,钱,孙,李,周,吴,郑,王,冯,陈,褚,卫,蒋, 沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,姜, 戚,谢

用C#生成随机中文汉字验证码的基本原理

前几天去申请免费QQ号码,突然发现申请表单中的验证码内容换成了中文,这叫真叫我大跌眼镜感到好笑,Moper上的猫儿们都大骂腾讯采用中文验证码.^_^  我不得不佩服腾讯为了防止目前网络上横行的QQ号码自动注册机而采取中文验证码的手段.仔细想了想感觉用程序生成随机的中文验证码并不是很难,下面就来介绍一下使用C#生成随机的中文汉字的原理. 1.汉字编码原理  到底怎么办到随机生成汉字的呢?汉字从哪里来的呢?是不是有个后台数据表,其中存放了所需要的所有汉字,使用程序随机取出几个汉字组合就行了呢?使用后

生成随机的名字

//以后不知道怎么给孩子取名,可以看看这个 public class RandomValueUtil { public static String base = "abcdefghijklmnopqrstuvwxyz0123456789"; private static String firstName = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅

生成随机中文

function getChar($num) // $num为生成汉字的数量 { $b = ''; for ($i=0; $i<$num; $i++) { // 使用chr()函数拼接双字节汉字,前一个chr()为高位字节,后一个为低位字节 $a = chr(mt_rand(0xB0,0xD0)).chr(mt_rand(0xA1, 0xF0)); // 转码 $b .= iconv('GB2312', 'UTF-8', $a); } return $b; } 原文地址:https://www.

【SQL Server 学习系列】-- sql 随机生成中文名字

原文:[SQL Server 学习系列]-- sql 随机生成中文名字 1 DECLARE @fName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)) -- 姓氏 2 DECLARE @lName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)) -- 名字 3 4 INSERT @fName VALUES 5 ('赵'),('钱'),('孙'),('李')

java 随机生成一个中文、判断某个string是否是中文以及打印出全部的中文

现在网上大多数用于判断中文字符的是 U+4E00..U+9FA5 这个范围是只是"中日韩统一表意文字"这个区间,但这不是全部,如果要全部包含,则还要他们的扩展集.部首.象形字.注间字母等等; 2E80-A4CF: 包含了中日朝部首补充.康熙部首.表意文字描述符.中日朝符号和标点.日文平假名.日文片假名.注音字母.谚文兼容字母.象形字注释标志.注音字母扩展.中日朝笔画.日文片假名语音扩展.带圈中日朝字母和月份.中日朝兼容.中日朝统一表意文字扩展A.易经六十四卦符号.中日韩统一表意文字.彝

在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码

只需几步就可以生成动态随机的验证码,最终效果如下图: 一 前台显示页面login.jsp 其中验证码显示的是一张图片,链接指向的是生成验证码的servlet,同时点击图片后触发changeImg()这个js函数,使其动态生成一个新的验证码,这个函数中的参数t=Math.random()并不会参与验证码的生成,它的作用仅仅只是表示每次提交的并不是同一个请求,需要单独处理,完整的login.jsp代码如下: <%@ page language="java" contentType=&

生成随机验证码

生成随机验证码实例 import random a=[] c ='' for i in range(6): if i == random.randrange(1,4): a.append(str(random.randint(1,9))) else: temp = random.randint(65,90) a.append(chr(temp)) print a b="".join(a) print b for i in a: c += str(i) print c 输出为 ['D',

利用Java随机,生成随机学生数据

为模拟向数据库中大量插入学生数据(注:此处应该用PreparedStatement.batchUpdate等批处理提高效率)的情形,通过Java随机来生成学生数据. 一.要生成的学生数据 students表设计如下: 其中前三项是数据库自动生成的,后面的10项需要程序生成. >>基于实际要求,插入的Student数据中,major和jnshuId不能同时相同.但由于随机数的不确定性,在程序中限制两个Student的major和jnshuId不同时相同复杂而低效.因此,选择在数据库中将major