用C++编一个身份证15位升18位的程序

来源:百度知道 编辑:UC知道 时间:2024/05/27 17:24:38
已知旧身份证号码为15位,其中第7~12位体现居民的出生日期,由两位年份+两位月份+两位日期组成;新身份证号码为18位,其中第7~14位体现居民的出身日期,由四位年份+两位月份+两位日期组成。试定义一个类ID,根据居民的出身日期校验其身份证号是否正确。具体要求如下:
int fun( ); 根据出生日期校验身份证号是否正确,如果正确,函数返回值为1,否则返回值为0。必须使用如下算法:首先确定身份证号码的位数(15位或18位),再分别取出身份证中的表示年份、月份、日期的子字符串,然后利用val函数分别将它们转换为数值,最后与相应成员数据比较,得到校验结果;
void print( ); 输出所有成员数据。
在主函数中输入两个身份证号(一个18位:321102190002151910,另一个15位:321102490318191),分别用这两个身份证号初始化类ID的两个对象,然后通过成员函数fun校验身份证号是否正确,并输出相应的信息(身份证号、出生日期、校验结果)

我这只有VB的。

  Dim a, w, s ,id
  msgbox "本程序用于身份证号码的校验与升位",vbokonly+vbinformation,"身份证校验程序"
  id=inputbox("输入15位身份证号码或18位身份证号码的前17位或","ID","11010519491231002")
  if vartype(id)<>0 then
  '检验号码输入合法性
  l=0
  do until l=1
  l=1
  p=""
  if len(id) <>17 then
  if len(id) <> 15 then
  l=0
  p="输入位数不正确,请输入15位或17位数字。"
  end if
  end if
  for i = 1 to len(id)
  a=mid(id,i,1)
  if asc(a)<asc("0") or asc(a)>asc("9") then
  l=0
  p=p & vbCrLf & vbCrLf & "请输入数字,不要包括字符“" & a & "”。"
  exit for
  end if
  next
  if l=0 then
  id=inputbox("输入不合法" & vbCrLf & vbCrLf & p,"输入错误",id)
  end if
  loop
  '将15位号码升位到17位号码
  if len(id)=15 then
  id = left(id,6) & "19" & right(id, 9)