iOS oc 身份证正则判断
时间: 2024-08-13 09:07:36 浏览: 71
在Objective-C中,对于iOS应用的身份证号码验证,通常会使用正则表达式来检查输入是否符合身份证号码的格式。中国大陆居民的身份证号码是由18位数字组成,分为三组:前6位是地区代码,接下来8位是出生日期码,最后4位是校验码(奇数位乘以2相加,偶数位直接相加,然后求和取余11,根据余数补上X或0)。
下面是一个基本的正则表达式示例,用于匹配中国大陆的18位身份证号码:
```objective-c
NSString *regex = @"^(\\d{15}$|^(\\d{17}(0|1|[3-9])|(\\d{15}[2-9]|\\d{18}))$)";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isValid = [predicate evaluateWithObject:inputString];
```
这个正则表达式的逻辑是这样的:
- `\\d{15}` 匹配15位数字的身份证号(旧版身份证)。
- `\\d{17}(0|1|[3-9])` 匹配18位数字,第17位为0-9的数字(新版身份证)。
- `(\\d{15}[2-9]|\\d{18})` 匹配18位数字,第17位为2-9的数字(新版身份证,第二组数字)。
- 第二部分用括号包裹,通过`|`表示或的关系,确保匹配任一情况。
相关问题
iOS开发 OC 正则表达式 判断字符串内容是否是数字
在OC中,可以使用正则表达式来判断一个字符串是否为数字。下面是一个判断整数和浮点数的正则表达式:
```objc
NSString *str = @"12.34";
NSString *pattern = @"^-?\\d+(\\.\\d+)?$";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSTextCheckingResult *result = [regex firstMatchInString:str options:0 range:NSMakeRange(0, str.length)];
BOOL isNumeric = result != nil;
```
这段代码中,我们使用了`NSRegularExpression`类来创建一个正则表达式,并使用该表达式在字符串中查找匹配。匹配成功后,会返回一个`NSTextCheckingResult`对象,如果该对象不为空,就表示字符串是数字。
需要注意的是,这个正则表达式可以匹配整数和浮点数,但是不能匹配科学计数法表示的数字。如果需要支持科学计数法,可以使用其他的正则表达式。
Swift身份证正则表达式
Swift 中身份证号码的正则表达式如下:
```
^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$
```
这个正则表达式可以用来验证 18 位身份证号码的合法性,其中号码中的 X 表示数字 10。
如果你想验证 15 位身份证号码的合法性,可以使用下面的正则表达式:
```
^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}$
```
使用正则表达式时,你可以使用 Swift 的 `range(of:pattern:options:range:locale:)` 方法来搜索字符串中是否存在符合规则的子串。
例如:
```
let regex = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"
let idNumber = "123456198906052233"
if idNumber.range(of: regex, options: .regularExpression) != nil {
print("身份证号码合法")
} else {
print("身份证号码不合法")
}
```
在上面的代码中,如果身份证号码合法,就会输出 "身份证号码合法";如果身份证号码不合法,就会输出 "身份证号码不合法"。
阅读全文