Web Service学习笔记:15或18位身份证验证带输出省、生日、性别Web服务

学了一段时间的Web服务,今天利用网上的资源,做了一个15或18位身份证验证带输出省、市、区、生日、性别,主要是想练练手。现在把过程和心得分享给大家。

文章在我小站上的地址:Web Service学习笔记:15或18位身份证验证带输出省、生日、性别Web服务

Web服务地址:http://www.h2bbs.com/Weather/IDcard.asmx

 

直接发代码:

 

ExpandedBlockStart.gif ContractedBlock.gif      /**/ /// <summary>
    
/// IDcard 的摘要说明
    
/// </summary>

    [WebService(Namespace  =   " http://www.h2bbs.com/Weather/IDcard.asmx " , Name  =   " IDcardWS " , Description  =   " 判断身份证号是否合法 " )]
    [WebServiceBinding(ConformsTo 
=  WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(
false )]
    
public   class  IDcard : System.Web.Services.WebService
ExpandedBlockStart.gifContractedBlock.gif    
{
        [WebMethod(Description 
= "输入15或18位身份证号码以验证其有效性")]
        
public idCardClass CheckCardidInfo(string cardid)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
string[] strProvince = new string[] nullnullnullnullnullnullnullnullnullnullnull"北京""天津""河北""山西""内蒙古"nullnullnullnullnull"辽宁""吉林""黑龙江"nullnullnullnullnullnullnull"上海""江苏""浙江""安微""福建""江西""山东"nullnullnull"河南""湖北""湖南""广东""广西""海南"nullnullnull"重庆""四川""贵州""云南""西藏"nullnullnullnullnullnull"陕西""甘肃""青海""宁夏""新疆"nullnullnullnullnull"台湾"nullnullnullnullnullnullnullnullnull"香港""澳门"nullnullnullnullnullnullnullnull"国外" };
            
double iSum = 0;
            idCardClass cardidData 
= new idCardClass();
            System.Text.RegularExpressions.Regex rg 
= new System.Text.RegularExpressions.Regex(@"^\d{17}(\d|x)$|^\d{15}$");
            System.Text.RegularExpressions.Match mc 
= rg.Match(cardid);
            
if (!mc.Success)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                cardidData.isValid 
= false;
                cardidData.chkInfo 
= "不是有效的身份证号";
                
return cardidData;
            }

            
if (cardid.Length == 15)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                cardid 
= this.convert15to18(cardid);
                cardid 
= cardid.ToLower();
                cardid 
= cardid.Replace("x""a");
            }

            
if (strProvince[int.Parse(cardid.Substring(02))] == null)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                cardidData.isValid 
= false;
                cardidData.chkInfo 
= "非法地区";
                
return cardidData;
            }

            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                DateTime.Parse(cardid.Substring(
64+ "-" + cardid.Substring(102+ "-" + cardid.Substring(122));
            }

            
catch
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                cardidData.isValid 
= false;
                cardidData.chkInfo 
= "非法生日";
                
return cardidData;
            }

            
for (int i = 17; i >= 0; i--)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                iSum 
+= (System.Math.Pow(2, i) % 11* int.Parse(cardid[17 - i].ToString(), System.Globalization.NumberStyles.HexNumber);
            }

            
if (iSum % 11 != 1)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                cardidData.isValid 
= false;
                cardidData.chkInfo 
= "非法证号";
                
return cardidData;
            }

            cardidData.isValid 
= true;
            cardidData.chkInfo 
= strProvince[int.Parse(cardid.Substring(02))] + "," + cardid.Substring(64+ "" + cardid.Substring(102+ "" + cardid.Substring(122+ "日," + (int.Parse(cardid.Substring(161)) % 2 == 1 ? "" : "");
            
return cardidData;
        }

        
//将15位身份证号码转换为18位
        private string convert15to18(string cardid)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
char[] strJiaoYan = '1''0''X''9''8''7''6''5''4''3''2' };
ExpandedSubBlockStart.gifContractedSubBlock.gif            
int[] intQuan = 79105842163791058421 };
            
string strTemp;
            
int intTemp = 0;
            strTemp 
= cardid.Substring(06+ "19" + cardid.Substring(6);
            
for (int i = 0; i <= strTemp.Length - 1; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                intTemp 
+= int.Parse(strTemp.Substring(i, 1)) * intQuan[i];
            }

            intTemp 
= intTemp % 11;
            
return strTemp + strJiaoYan[intTemp];
        }

        
//用于保存身份证验证结果的类
        public class idCardClass
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
public idCardClass()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
            }

            
public bool isValid;
            
public string chkInfo;
        }

    }

 

下面这个效果是我原来的带输出省、市、区的身份证号Web服务,但想想有点漏洞,而且他关联数据库,所以也就没发这个,上面的代码是有点啰嗦,园子里有人写过新的验证15位、18位的身份证号验证,大家可以去搜搜,不过他好像不能输出省。

 

转载于:https://www.cnblogs.com/VisualStudio/archive/2008/10/24/1318468.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值