标题:身份证的奥秘,出现无效引用内存,求助
只看楼主
bluesword
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-5-31
 问题点数:0 回复次数:1 
身份证的奥秘,出现无效引用内存,求助
大神求助 这个某个测试显示无效引用内存 题目是身份证的奥秘
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
char a[20];
int b[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int n,i,j,sum,m;
scanf("%d",&n);
for(j=0;j<n;j++)
{
    scanf("%s",a);
    if(strlen(a)==18)
    {
        if(a[17]=='X')
        a[17]=10;
        else
        a[17]=a[17]-'0';
        for(i=0;i<17;i++)
        a[i]=a[i]-'0';
        for(i=0,sum=0;i<17;i++)
        {
            sum+=(a[i]*b[i]);
        }
        m=sum%11;
        if(m==1)
        m=0;
        else if(m==0)
        m=1;
        else
        m=(6-m)*2+m;
        if(m==a[17])
        printf("Valid\n");
        else
        printf("Invalid\n");
    }
    else if(strlen(a)==15)
    {
        for(i=0;i<15;i++)
        a[i]=a[i]-'0';
        for(i=14;i>5;i--)
        {
            a[i+2]=a[i];
        }
        a[18]='\0';
        a[6]=1;
        if(a[14]==9&&a[15]==9&&a[16]>5)
            a[7]=8;
        else
            a[7]=9;
        for(i=0;i<17;i++)
        printf("%d",a[i]);
        for(i=0,sum=0;i<17;i++)
        {
            sum+=(a[i]*b[i]);
        }
        m=sum%11;
        if(m==1)
        m=0;
        else if(m==0)
        m=1;
        else
        m=(6-m)*2+m;
        if(m==10)
        printf("X\n");
        else
        printf("%d\n",m);
    }
    else
    printf("Invalid\n");
}
}
搜索更多相关主题的帖子: 身份证 
2017-05-31 16:53
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
你这代码是干啥的啊

DO IT YOURSELF !
2017-06-02 12:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-477499-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.192846 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved