本来自己实现的获取身份证号码很简单,但是考虑到通用型,又重构了一下。

注释不多,但也足够了,代码即注释。

直接上代码,如下:

//验证容器元素是否连续
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++ 在字符串中获取身份证号相关推荐

  1. php从字符串中提取身份证号(代码汇总)

    15位数身份证验证正则表达式: $sfzh=preg_match("/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/ " ...

  2. js从字符串中提取身份证号,连续18位数字

    <!DOCTYPE html> <html> <head><title>提取身份证号</title><meta charset=&qu ...

  3. python身份证的秘密_Python算法之旅字符串游戏之身份证号的秘密

    最近在力扣(LeetCode)网闲逛,发现很多题目的官方题解都是用Python语言来描述的,这说明大家已经逐渐认识到Python语言描述算法的优越性:它语法简明,内置函数丰富,表述直截了当,可以用最简 ...

  4. 已解决Python向数据库插入数据的字符串中含有单引号或双引号报错

    已解决Python向数据库插入数据的字符串中含有单引号或双引号报错:(102, b"Incorrect syntax near 'S'.DB-Lib error message 20018, ...

  5. 去掉字符串中的单引号和双引号_同时搞定Android和iOS的Dart语言(4):字符串类型...

    在Dart语言中,用String表示字符串类型,可以用单引号或双引号表示字符串的值,例如,下面声明String类型变量的代码都是正确的. String s1 = 'hello world';Strin ...

  6. String字符串中获取所有匹配结果的索引值

    String字符串中获取所有匹配结果的索引值 例如现在我们有这样一段代码 public interface ActErrorHisMapper {public List<ActError> ...

  7. C语言试题四十二之假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。

    1. 题目 请编写一个函数function,它的功能是:假定输入的字符串中只包含字母和*号,它的功能是:将字符串中的前导*号全部移到字符串的尾部. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语 ...

  8. C语言试题四十之使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。

    1. 题目 请编写一个函数function,它的功能是:假定输入的字符串中只包含字母和*号.请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个:若多于n个,则删除多于的*号:若少于或等于n ...

  9. C语言试题七之将函数字符串中的前导*号全部删除,中间和尾部的*号不删除。

    1. 题目 规定输入字符串中只包含字母和*号.请编写函数fun,它的功能是:将函数字符串中的前导*号全部删除,中间和尾部的*号不删除. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试 ...

最新文章

  1. coco关键点标注json_COCO 数据集中目标检测标注说明
  2. stm32L0工程建立(HAL+IAR,无cubemx)
  3. GDCM:gdcm::UIComp的测试程序
  4. 独立游戏荣获TGA最佳叙事奖,《极乐迪斯科》凭什么这么牛?
  5. 前端开发的正确姿势——各种文件的目录结构规划及引用
  6. kafka相关名称介绍
  7. CATia对计算机配置要求,【2人回答】求CATIA对电脑的详细配置要求-3D溜溜网
  8. python if语句 for语句 while语句
  9. redis学习-redis事务
  10. python3中def的用法-python3中的def函数语法错误
  11. 每天一点正则表达式积累(四)
  12. WindRiver编译小结
  13. Linux服务器建立IP隧道,变更访问出口
  14. Python 函数的定义与调用
  15. 华为企业网络营销系统分析报告
  16. 网上赚钱怎么赚?锁定一个项目,才是赚钱的王道!
  17. php laravel model,如何使用 Laravel Eloquent Model
  18. AsyncTask的原理
  19. java implements用法_JAVA中implements的用法
  20. TIS100入门向攻略

热门文章

  1. 【基于C#的图书借阅管理系统(ASP.NET)】
  2. GB/T 22239——2008信息系统安全等级保护基本要求审计相关
  3. openlava-6.0,cde
  4. 【Baltic2008】黑手党(Mafia)(BSOI2891)
  5. oracle 优化器之执行计划
  6. 交通诱导屏(可变信息情报板)安全管控系统
  7. 7-5 大勾股定理 (15 分)
  8. 开源聊天服务器openfire
  9. 联想Z475拆修-板号KL6C
  10. 深入浅出最优化(2) 步长的计算方法