C++ 在字符串中获取身份证号
本来自己实现的获取身份证号码很简单,但是考虑到通用型,又重构了一下。
注释不多,但也足够了,代码即注释。
直接上代码,如下:
//验证容器元素是否连续
bool IsContuity(vector<int> vec_int)
{int length = vec_int.size();if (1 == length){return true;}for (int index = 0; index < length - 1; ++index){if (vec_int[index] + 1 != vec_int[index + 1]){return false;}}return true;
}//验证18位身份证号码是否有效
bool IsValidID(const string& str_id)
{int weight[] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };char valid_num[] = { '1','0','X','9','8','7','6','5','4','3','2' };int sum = 0;int mode = 0;int length = str_id.length();if (length == 18){for (int i = 0; i < length - 1; i++){sum = sum + (str_id[i] - '0') * weight[i];}mode = sum % 11;if (valid_num[mode] == str_id[17]){return true;}}return false;
}//获取18位身份证号码
string GetIDNumber(const string& str)
{int length = str.length();int count = 0;vector<int> vec_int;string str_number;int index_record = 0;bool b_first_num = true;for (int index = 0; index < length; ++index){int n = (int)str[index];//将每一个字符转化为ASCII值if (n >= 48 && n <= 57 || n == 120 || n == 88){++count;vec_int.push_back(index);str_number += str[index];if (!IsContuity(vec_int)){count = 0;b_first_num = true;vec_int.clear();str_number.clear();continue;}if (b_first_num){index_record = index;b_first_num = false;}if (count == 18 && vec_int.size() == 18){if (IsValidID(str_number)){return str_number;break;}else{count = 0;index = index_record;b_first_num = true;vec_int.clear();str_number.clear();}}}}return "";
}int main()
{ string str = ":的手机费dsf,s的技;术的。积分i【】s地方dfsd951018219911022842X52X01258656fjodjfsodifs胜多负少的法律手段";auto id_number = GetIDNumber(str);cout << id_number << endl;system("pause");return 0;
}
运行结果如下:
注:身份证号码(51018219911022842X)是网上随机获取的,不针对任何人。
C++ 在字符串中获取身份证号相关推荐
- php从字符串中提取身份证号(代码汇总)
15位数身份证验证正则表达式: $sfzh=preg_match("/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/ " ...
- js从字符串中提取身份证号,连续18位数字
<!DOCTYPE html> <html> <head><title>提取身份证号</title><meta charset=&qu ...
- python身份证的秘密_Python算法之旅字符串游戏之身份证号的秘密
最近在力扣(LeetCode)网闲逛,发现很多题目的官方题解都是用Python语言来描述的,这说明大家已经逐渐认识到Python语言描述算法的优越性:它语法简明,内置函数丰富,表述直截了当,可以用最简 ...
- 已解决Python向数据库插入数据的字符串中含有单引号或双引号报错
已解决Python向数据库插入数据的字符串中含有单引号或双引号报错:(102, b"Incorrect syntax near 'S'.DB-Lib error message 20018, ...
- 去掉字符串中的单引号和双引号_同时搞定Android和iOS的Dart语言(4):字符串类型...
在Dart语言中,用String表示字符串类型,可以用单引号或双引号表示字符串的值,例如,下面声明String类型变量的代码都是正确的. String s1 = 'hello world';Strin ...
- String字符串中获取所有匹配结果的索引值
String字符串中获取所有匹配结果的索引值 例如现在我们有这样一段代码 public interface ActErrorHisMapper {public List<ActError> ...
- C语言试题四十二之假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。
1. 题目 请编写一个函数function,它的功能是:假定输入的字符串中只包含字母和*号,它的功能是:将字符串中的前导*号全部移到字符串的尾部. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语 ...
- C语言试题四十之使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。
1. 题目 请编写一个函数function,它的功能是:假定输入的字符串中只包含字母和*号.请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个:若多于n个,则删除多于的*号:若少于或等于n ...
- C语言试题七之将函数字符串中的前导*号全部删除,中间和尾部的*号不删除。
1. 题目 规定输入字符串中只包含字母和*号.请编写函数fun,它的功能是:将函数字符串中的前导*号全部删除,中间和尾部的*号不删除. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试 ...
最新文章
- coco关键点标注json_COCO 数据集中目标检测标注说明
- stm32L0工程建立(HAL+IAR,无cubemx)
- GDCM:gdcm::UIComp的测试程序
- 独立游戏荣获TGA最佳叙事奖,《极乐迪斯科》凭什么这么牛?
- 前端开发的正确姿势——各种文件的目录结构规划及引用
- kafka相关名称介绍
- CATia对计算机配置要求,【2人回答】求CATIA对电脑的详细配置要求-3D溜溜网
- python if语句 for语句 while语句
- redis学习-redis事务
- python3中def的用法-python3中的def函数语法错误
- 每天一点正则表达式积累(四)
- WindRiver编译小结
- Linux服务器建立IP隧道,变更访问出口
- Python 函数的定义与调用
- 华为企业网络营销系统分析报告
- 网上赚钱怎么赚?锁定一个项目,才是赚钱的王道!
- php laravel model,如何使用 Laravel Eloquent Model
- AsyncTask的原理
- java implements用法_JAVA中implements的用法
- TIS100入门向攻略