您的位置:首页 > 编程语言 > C语言/C++

C++ 如何判断姓名字符串符合百家姓

2016-04-08 10:18 281 查看
最近做注册窗口身份证+姓名认证时,有个需求:姓名必须是符合百家姓的

据说有现成的公安系统可以使用,但是是按次收费的,果断放弃此方案,

网上找了一圈没有,

有人说用正则,正则最多能判断是不是中文吧,还能判断出“秀”、“欧冠”是不是属于百家姓?感觉也不靠谱

没办法,干脆自己写吧,全是体力活,希望能帮助到需要的人! 有问题欢迎指出,一起探讨!

// .h
BOOL		IsInBookOfFamilyNames(LPCTSTR szString);	// 百家姓
// .cpp
const int FAMILY_NAMES_SINGLE_CNT = 444;  // 单姓
const int FAMILY_NAMES_CNT = 504;		  // 百家姓


TCHAR g_szBookOfFamilyNames[FAMILY_NAMES_CNT][5] = {
_T("赵"), _T("钱"), _T("孙"), _T("李"), _T("周"), _T("吴"), _T("郑"), _T("王"), _T("冯"), _T("陈"),
_T("褚"), _T("卫"), _T("蒋"), _T("沈"), _T("韩"), _T("杨"), _T("朱"), _T("秦"), _T("尤"), _T("许"),
_T("何"), _T("吕"), _T("施"), _T("张"), _T("孔"), _T("曹"), _T("严"), _T("华"), _T("金"), _T("魏"),
_T("陶"), _T("姜"), _T("戚"), _T("谢"), _T("邹"), _T("喻"), _T("柏"), _T("水"), _T("窦"), _T("章"),
_T("云"), _T("苏"), _T("潘"), _T("葛"), _T("奚"), _T("范"), _T("彭"), _T("郎"), _T("鲁"), _T("韦"),
_T("昌"), _T("马"), _T("苗"), _T("凤"), _T("花"), _T("方"), _T("俞"), _T("任"), _T("袁"), _T("柳"),
_T("酆"), _T("鲍"), _T("史"), _T("贺"), _T("唐"), _T("费"), _T("廉"), _T("岑"), _T("薛"), _T("雷"),
_T("倪"), _T("汤"), _T("滕"), _T("殷"), _T("罗"), _T("毕"), _T("郝"), _T("邬"), _T("安"), _T("常"),
_T("乐"), _T("于"), _T("时"), _T("傅"), _T("皮"), _T("卞"), _T("齐"), _T("康"), _T("伍"), _T("余"),
_T("元"), _T("卜"), _T("顾"), _T("孟"), _T("平"), _T("黄"), _T("和"), _T("穆"), _T("萧"), _T("尹"),
_T("姚"), _T("邵"), _T("湛"), _T("汪"), _T("祁"), _T("毛"), _T("禹"), _T("狄"), _T("米"), _T("贝"),
_T("明"), _T("臧"), _T("计"), _T("伏"), _T("成"), _T("戴"), _T("谈"), _T("宋"), _T("茅"), _T("庞"),
_T("熊"), _T("纪"), _T("舒"), _T("屈"), _T("项"), _T("祝"), _T("董"), _T("粱"), _T("杜"), _T("阮"),
_T("蓝"), _T("闵"), _T("席"), _T("季"), _T("麻"), _T("强"), _T("贾"), _T("路"), _T("娄"), _T("危"),
_T("江"), _T("童"), _T("颜"), _T("郭"), _T("梅"), _T("盛"), _T("林"), _T("刁"), _T("钟"), _T("徐"),
_T("邱"), _T("骆"), _T("高"), _T("夏"), _T("蔡"), _T("田"), _T("樊"), _T("胡"), _T("凌"), _T("霍"),
_T("虞"), _T("万"), _T("支"), _T("柯"), _T("昝"), _T("管"), _T("卢"), _T("莫"), _T("经"), _T("房"),
_T("裘"), _T("缪"), _T("干"), _T("解"), _T("应"), _T("宗"), _T("丁"), _T("宣"), _T("贲"), _T("邓"),
_T("郁"), _T("单"), _T("杭"), _T("洪"), _T("包"), _T("诸"), _T("左"), _T("石"), _T("崔"), _T("吉"),
_T("钮"), _T("龚"), _T("程"), _T("嵇"), _T("邢"), _T("滑"), _T("裴"), _T("陆"), _T("荣"), _T("翁"),
_T("荀"), _T("羊"), _T("於"), _T("惠"), _T("甄"), _T("麴"), _T("家"), _T("封"), _T("芮"), _T("羿"),
_T("储"), _T("靳"), _T("汲"), _T("邴"), _T("糜"), _T("松"), _T("井"), _T("段"), _T("富"), _T("巫"),
_T("乌"), _T("焦"), _T("巴"), _T("弓"), _T("牧"), _T("隗"), _T("山"), _T("谷"), _T("车"), _T("侯"),
_T("宓"), _T("蓬"), _T("全"), _T("郗"), _T("班"), _T("仰"), _T("秋"), _T("仲"), _T("伊"), _T("宫"),
_T("宁"), _T("仇"), _T("栾"), _T("暴"), _T("甘"), _T("钭"), _T("厉"), _T("戎"), _T("祖"), _T("武"),
_T("符"), _T("刘"), _T("景"), _T("詹"), _T("束"), _T("龙"), _T("叶"), _T("幸"), _T("司"), _T("韶"),
_T("郜"), _T("黎"), _T("蓟"), _T("薄"), _T("印"), _T("宿"), _T("白"), _T("怀"), _T("蒲"), _T("邰"),
_T("从"), _T("鄂"), _T("索"), _T("咸"), _T("籍"), _T("赖"), _T("卓"), _T("蔺"), _T("屠"), _T("蒙"),
_T("池"), _T("乔"), _T("阴"), _T("欎"), _T("胥"), _T("能"), _T("苍"), _T("双"), _T("闻"), _T("莘"),
_T("党"), _T("翟"), _T("谭"), _T("贡"), _T("劳"), _T("逄"), _T("姬"), _T("申"), _T("扶"), _T("堵"),
_T("冉"), _T("宰"), _T("郦"), _T("雍"), _T("舄"), _T("璩"), _T("桑"), _T("桂"), _T("濮"), _T("牛"),
_T("寿"), _T("通"), _T("边"), _T("扈"), _T("燕"), _T("冀"), _T("郏"), _T("浦"), _T("尚"), _T("农"),
_T("温"), _T("别"), _T("庄"), _T("晏"), _T("柴"), _T("瞿"), _T("阎"), _T("充"), _T("慕"), _T("连"),
_T("茹"), _T("习"), _T("宦"), _T("艾"), _T("鱼"), _T("容"), _T("向"), _T("古"), _T("易"), _T("慎"),
_T("戈"), _T("廖"), _T("庾"), _T("终"), _T("暨"), _T("居"), _T("衡"), _T("步"), _T("都"), _T("耿"),
_T("满"), _T("弘"), _T("匡"), _T("国"), _T("文"), _T("寇"), _T("广"), _T("禄"), _T("阙"), _T("东"),
_T("殴"), _T("殳"), _T("沃"), _T("利"), _T("蔚"), _T("越"), _T("夔"), _T("隆"), _T("师"), _T("巩"),
_T("厍"), _T("聂"), _T("晁"), _T("勾"), _T("敖"), _T("融"), _T("冷"), _T("訾"), _T("辛"), _T("阚"),
_T("那"), _T("简"), _T("饶"), _T("空"), _T("曾"), _T("毋"), _T("沙"), _T("乜"), _T("养"), _T("鞠"),
_T("须"), _T("丰"), _T("巢"), _T("关"), _T("蒯"), _T("相"), _T("查"), _T("後"), _T("荆"), _T("红"),
_T("游"), _T("竺"), _T("权"), _T("逯"), _T("盖"), _T("益"), _T("桓"), _T("公"), _T("墨"), _T("哈"),
_T("谯"), _T("笪"), _T("年"), _T("爱"), _T("阳"), _T("佟"), _T("商"), _T("帅"), _T("佘"), _T("佴"),
_T("仉"), _T("督"), _T("归"), _T("海"), _T("伯"), _T("赏"), _T("岳"), _T("楚"), _T("缑"), _T("亢"),
_T("况"), _T("后"), _T("有"), _T("琴"), _T("言"), _T("福"), _T("晋"), _T("牟"), _T("闫"), _T("法"),
_T("汝"), _T("鄢"), _T("涂"), _T("钦"), _T("东郭"), _T("南门"), _T("呼延"), _T("羊舌"), _T("微生"), _T("左丘"),
_T("万俟"), _T("司马"), _T("上官"), _T("欧阳"), _T("夏侯"), _T("诸葛"), _T("闻人"), _T("东方"), _T("赫连"), _T("皇甫"),
_T("尉迟"), _T("公羊"), _T("澹台"), _T("公冶"), _T("宗政"), _T("濮阳"), _T("东门"), _T("西门"), _T("南宫"), _T("第五"),
_T("淳于"), _T("单于"), _T("太叔"), _T("申屠"), _T("公孙"), _T("仲孙"), _T("轩辕"), _T("令狐"), _T("钟离"), _T("宇文"),
_T("长孙"), _T("慕容"), _T("鲜于"), _T("闾丘"), _T("司徒"), _T("司空"), _T("亓官"), _T("司寇"), _T("子车"), _T("夹谷"),
_T("颛孙"), _T("端木"), _T("巫马"), _T("公西"), _T("漆雕"), _T("乐正"), _T("壤驷"), _T("公良"), _T("拓跋"), _T("梁丘"),
_T("宰父"), _T("谷梁"), _T("段干"), _T("百里")};

BOOL IsInBookOfFamilyNames(LPCTSTR szString)
{
if (!IsStringChinese(szString))  // 是否全中文 参见 本博客上一篇文章
return FALSE;

CString strName, strName1, strName2;
strName.Format(_T("%s"), szString);

strName1 = strName.Left(2); // 单姓
strName2 = strName.Left(4); // 复姓

for (int i = 0; i < FAMILY_NAMES_SINGLE_CNT; i++)
{
if (strstr(strName1, g_szBookOfFamilyNames[i]))
{
return (strName.GetLength() > 2);
}
}

for(int k = FAMILY_NAMES_SINGLE_CNT; k < FAMILY_NAMES_CNT; k++)
{
if (strstr(strName2, g_szBookOfFamilyNames[k]))
{
return (strName.GetLength() > 4);
}
}

return FALSE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息