问题描述
- 注册框怎么修改,关于身份证号
-
//效验证件
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;
}
代码已经找到,现在的问题是用上面代码注册时,不填身份证也能注册,想要的效果是注册时必须填身份证。 (现在有的注册框在身份证这项前也有*号,但不起作用啊)
解决方案
你的代码只有校验的逻辑没有在界面上阻止用户操作和提示的逻辑。
在你界面的按钮处理代码中加上
if (!EficacyPassPortID(...))
MessageBox(错误);
解决方案二:
在你界面的按钮处理代码中加上
兄弟请问下这个东西在哪里啊 可以具体一点吗? 因为我也才学的啊 不知道哪里啊
时间: 2024-11-08 19:53:17