身份證正則表達式

#pragma mark - 身份證的正則表達式
+(BOOL)checkUserID:(NSString *)userID
{
??? //長度不為18的都排除掉
??? if (userID.length!=18) {
??????? return NO;
??? }
?? ?
??? //校驗格式
??? NSString *regex2 = @"^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)$";
??? NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
??? BOOL flag = [identityCardPredicate evaluateWithObject:userID];
?? ?
??? if (!flag) {
??????? return flag;??? //格式錯誤
??? }else {
??????? //格式正確在判斷是否合法
?????? ?
??????? //將前17位加權因子保存在數組里
??????? NSArray * idCardWiArray = @[@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2"];
?????? ?
??????? //這是除以11后,可能產生的11位余數、驗證碼,也保存成數組
??????? NSArray * idCardYArray = @[@"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2"];
?????? ?
??????? //用來保存前17位各自乖以加權因子后的總和
??????? NSInteger idCardWiSum = 0;
??????? for(int i = 0;i < 17;i++)
??????? {
??????????? NSInteger subStrIndex = [[userID substringWithRange:NSMakeRange(i, 1)] integerValue];
??????????? NSInteger idCardWiIndex = [[idCardWiArray objectAtIndex:i] integerValue];
?????????? ?
??????????? idCardWiSum+= subStrIndex * idCardWiIndex;
?????????? ?
??????? }
?????? ?
??????? //計算出校驗碼所在數組的位置
??????? NSInteger idCardMod=idCardWiSum%11;
?????? ?
??????? //得到最后一位身份證號碼
??????? NSString * idCardLast= [userID substringWithRange:NSMakeRange(17, 1)];
?????? ?
??????? //如果等于2,則說明校驗碼是10,身份證號碼最后一位應該是X
??????? if(idCardMod==2)
??????? {
??????????? if([idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"])
??????????? {
??????????????? return YES;
??????????? }else
??????????? {
??????????????? return NO;
??????????? }
??????? }else{
??????????? //用計算出的驗證碼與最后一位身份證號碼匹配,如果一致,說明通過,否則是無效的身份證號碼
??????????? if([idCardLast isEqualToString: [idCardYArray objectAtIndex:idCardMod]])
??????????? {
??????????????? return YES;
??????????? }
??????????? else
??????????? {
??????????????? return NO;
??????????? }
??????? }
??? }
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458399.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458399.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458399.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java中可重入鎖的學習總結

2019獨角獸企業重金招聘Python工程師標準>>> 經常看到網上的人說&#xff0c;可重入鎖一詞&#xff0c;但是總是沒怎么了解&#xff0c;到底什么是可重入鎖&#xff0c;一直是一個模糊的概念&#xff0c;下面來大致總結一下。 可重入鎖&#xff1a;指的是同一個線程…

Oracle DB優化

http://www.jb51.net/article/77876.htm http://www.jb51.net/article/56881.htm http://danni505.blog.51cto.com/15547/1163711/ http://blog.csdn.net/giianhui/article/details/8172786轉載于:https://www.cnblogs.com/diyunpeng/p/5132392.html

設置View單個圓角

#pragma mark - 設置View單個圓角 (void)addCornerWithView:(UIView *)aView type:(UIRectCorner)aCorners size:(CGSize)aSize { // 根據矩形畫帶圓角的曲線 UIBezierPath *maskPath [UIBezierPath bezierPathWithRoundedRect:aView.bounds byRoundingCorners:aCorn…

Python 數據類型

簡述Python 中的每個值都有一個數據類型。在 Python 編程中&#xff0c;一切&#xff08;萬物&#xff09;皆對象&#xff0c;數據類型實際上是類&#xff0c;變量是這些類的實例&#xff08;對象&#xff09;。簡述數據類型Number數字String字符串List列表Tuple元組Set集合Dic…

基于用戶投票的排名算法(一):Delicious和Hacker News

互聯網的出現&#xff0c;意味著"信息大爆炸"。 用戶擔心的&#xff0c;不再是信息太少&#xff0c;而是信息太多。如何從大量信息之中&#xff0c;快速有效地找出最重要的內容&#xff0c;成了互聯網的一大核心問題。 各種各樣的排名算法&#xff0c;是目前過濾信息…

iOS 修改工程名

一兩個月之前&#xff0c;公司要求將現在的項目&#xff08;發貨端和接單端在一個項目里&#xff09;&#xff0c;拆分成兩個項目分別是接單端項目和發貨端項目&#xff0c;原有的項目還不能下架。這種情況就要考慮蘋果審核查代碼的重復率的問題了。老板的要求除了改變項目的主…

Windows 下 Python 環境搭建

簡述Python 是跨平臺的&#xff0c;可以運行在 Windows、Mac OS X 和各種 Linux/Unix 系統上。在學習 Python 之前&#xff0c;首先要搭建 Python 環境。完成后&#xff0c;會得到 Python 解釋器&#xff08;負責運行 Python 程序的&#xff09;&#xff0c;一個命令行交互環境…

面試中關于Java你所需知道的的一切

本篇文章會對面試中常遇到的Java技術點進行全面深入的總結&#xff0c;幫助我們在面試中更加得心應手&#xff0c;不參加面試的同學也能夠借此機會梳理一下自己的知識體系&#xff0c;進行查漏補缺。 1. Java中的原始數據類型都有哪些&#xff0c;它們的大小及對應的封裝類是什…

利用BBRSACryptor實現iOS端的RSA加解密

背景 RSA這種非對稱加密被廣泛的運用于網絡數據的傳輸&#xff0c;但其在iOS上很難直接實現&#xff0c;BBRSACryptor框架通過移植openssl實現了iOS端的RSA&#xff0c;本文將介紹如何使用BBRSACryptor生成證書&#xff0c;加載公鑰&#xff0c;以及后端如何用php讀取證書&…

UIView轉UIimage

/** 將 UIView 轉換成 UIImage param view 將要轉換的View return 新生成的 UIImage 對象 */ - (UIImage *)yj_convertCreateImageWithUIView:(UIView *)view{ UIGraphicsBeginImageContext(view.bounds.size); CGContextRef ctx UIGraphicsGetCurrentContext…

Linq 合并數據并相加

有幾條數據是這樣的 Person 123 456 789 Person 321 654 987 想合并成 Person 444 1110 1776 直接一條linq搞定 var newQuery from p in query group p by p.Name into gselect new { Name g.Name, Value g.Sum(x > x.Value) }; 轉…

python 各種模塊學習

from&#xff1a;https://blog.csdn.net/weiwangchao_/article/details/70570508轉載&#xff1a;。。。。Python的模塊大全&#xff0c;很全&#xff0c;有詳細介紹&#xff01;另外附Python兩個教程1. Python詳細教程&#xff08;廖雪峰的官方網站&#xff0c;語言簡潔&#…

Linux(Fedora21)安裝google chrome瀏覽器

2019獨角獸企業重金招聘Python工程師標準>>> Linux(Fedora21)安裝Google Chrome瀏覽器 qianghaoaho(孤狼) 1.添加google chrome的源&#xff1a; cd /etc/yum.repos.d/ vim chrome.repo添加如下內容&#xff1a; [google64] …

啟動頁更換圖片后,加載不出來

這個問題&#xff0c;重啟一下手機就可以了&#xff0c;我的就是這么解決的。

R-大數據分析挖掘(5-R基礎回顧)

&#xff08;一&#xff09;R函數 R是一種解析型語言&#xff0c;輸入后可直接獲取結果 函數&#xff08;輸入參數&#xff0c;參數&#xff09; R的函數分為“高級”和“低級函數”     ??高級函數可調用低級函數     ??高級函數稱為泛型函數 ??函數名 <-‐…

jquery點擊label觸發2次的問題

今天寫問卷的時候遇到個label點擊的時候&#xff0c;監聽的click事件被執行兩次&#xff1b;產生這個的原因么。。。事件冒泡 <div class"questionBox checkBox"><div class"title"> 2.你如何理解創新意識的重要性?</div><div class…

git本地項目管理

Git 基本工作流程 | git倉庫 | 暫存區 | 工作目錄 | | ---------------- | ------------------ | ------------------- | | 用于存放提 交記錄 | 臨時存放被修改文件 | 被Git管理的項目目錄 | Git 的使用 1.5.1 Git 使用前配置 在使用 git 前&#xff0c;需要告訴 git 你…

Python中self用法詳解

在介紹Python的self用法之前&#xff0c;先來介紹下Python中的類和實例…… 我們知道&#xff0c;面向對象最重要的概念就是類&#xff08;class&#xff09;和實例&#xff08;instance&#xff09;&#xff0c;類是抽象的模板&#xff0c;比如學生這個抽象的事物&#xff0c;…

siwft初學(一)

今天剛開始學習swift語言。首先須要下載xcode6 beta版本號。正式版本號然后會公布。自己學習總結一下&#xff0c;假設有誤。請大家指出。 創建project的時候。language選擇swift語言。 swift語言比起c&#xff0c;oc很的簡潔。開始真有點不適應&#xff0c;沒有main函數&#…

python簡單爬蟲(一)

學習python前糾結了下&#xff0c;到底是應該一個個知識點吃透&#xff0c;然后寫些小程序。還是應該快速掌握基礎語法&#xff0c;快速實踐。思考后認為前者這么學習速度真心不高&#xff0c;于是花2天時間看了下python3的語法&#xff0c;雖然很多都不明白&#xff0c;但是帶…