//效验证件
bool CUserItemElement::EfficacyPassPortID(LPCTSTR pszPassPortID, TCHAR szDescribe[], WORD wMaxCount)
{
//长度判断
UINT nCharLength=lstrlen(pszPassPortID);
if(nCharLength==0L) return true;
//变量定义
bool bNumber=true;
//数字判断
for (UINT i=0;i<nCharLength;i++)
{
if ((pszPassPortID[i]<TEXT('0'))||(pszPassPortID[i]>TEXT('9')))
{
if(pszPassPortID[i] != TEXT('x') && pszPassPortID[i] != TEXT('X'))
{
bNumber=false;
break;
}
}
}
//合法判断
if ((bNumber==false)||((nCharLength!=15L)&&(nCharLength!=18L)))
{
lstrcpyn(szDescribe,TEXT("身份证号码必须为 15 位或者 18 位数字,请重新输入!"),wMaxCount);
return false;
}
//变量定义
bool bNewPassPortID = (nCharLength==18L);
bool bYear=true;
bool bMonth=true;
bool bDay=true;
bool bCheck=true;
//合法判断
if(bNewPassPortID)
{
TCHAR szYear[10]={0};
for(BYTE i=0; i<4; i++)
{
szYear[i]=pszPassPortID[i+6];
}
int nYear = StrToInt(szYear);
if(nYear < 1900 || nYear > 2100)
{
bYear=false;
}
}
//合法判断
BYTE cbIndex=8;
if(bNewPassPortID)cbIndex=10;
TCHAR szMonth[10]={0};
for(BYTE i=0; i<2; i++)
{
szMonth[i]=pszPassPortID[i+cbIndex];
}
int nMonth = StrToInt(szMonth);
if(nMonth < 1 || nMonth > 12)
{
bMonth=false;
}
//合法判断
cbIndex=10;
if(bNewPassPortID)cbIndex=12;
TCHAR szDay[10]={0};
for(BYTE i=0; i<2; i++)
{
szDay[i]=pszPassPortID[i+cbIndex];
}
int nDay = StrToInt(szDay);
if(nDay < 1 || nDay > 31)
{
bDay=false;
}
//合法判断
if(bNewPassPortID)
{
TCHAR szTemp[10]={0};
int nSum=0;
int nWi[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};
TCHAR cCheckArry[]={TEXT('1'),TEXT('0'),TEXT('X'),TEXT('9'),TEXT('8'),TEXT('7'),TEXT('6'),TEXT('5'),TEXT('4'),TEXT('3'),TEXT('2')};
for(BYTE i=0; i<17; i++)
{
szTemp[0]=pszPassPortID[i];
int nAi=StrToInt(szTemp);
nSum+=(nAi*nWi[i]);
}
TCHAR cCheck=cCheckArry[nSum%11];
TCHAR cCheck2=pszPassPortID[17];
if((cCheck2 != cCheck) && !((cCheck==TEXT('X')) && (cCheck2==TEXT('x'))))
{
bCheck=false;
}
}
//合法判断
if(!bYear||!bMonth||!bDay||!bCheck)
{
lstrcpyn(szDescribe,TEXT("您输入的身份证号码不正确,请重新输入正确的身份证号码!"),wMaxCount);
return false;
}
return true;
}
代码已经找到,现在的问题是用上面代码注册时,不填身份证也能注册,想要的效果是注册时必须填身份证。 (现在有的注册框在身份证这项前也有*号,但不起作用啊)