开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验

下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验):

iOS代码:

/**

*  银行卡格式校验

*

*  @param cardNo 银行卡号

*

*  @return

*/

+ (BOOL) checkCardNo:(NSString*) cardNo{

int oddsum = 0;     //奇数求和

int evensum = 0;    //偶数求和

int allsum = 0;

int cardNoLength = (int)[cardNo length];

int lastNum = [[cardNo substringFromIndex:cardNoLength-1] intValue];

cardNo = [cardNo substringToIndex:cardNoLength - 1];

for (int i = cardNoLength -1 ; i>=1;i--) {

NSString *tmpString = [cardNo substringWithRange:NSMakeRange(i-1, 1)];

int tmpVal = [tmpString intValue];

if (cardNoLength % 2 ==1 ) {

if((i % 2) == 0){

tmpVal *= 2;

if(tmpVal>=10)

tmpVal -= 9;

evensum += tmpVal;

}else{

oddsum += tmpVal;

}

}else{

if((i % 2) == 1){

tmpVal *= 2;

if(tmpVal>=10)

tmpVal -= 9;

evensum += tmpVal;

}else{

oddsum += tmpVal;

}

}

}

allsum = oddsum + evensum;

allsum += lastNum;

if((allsum % 10) == 0)

return YES;

else

return NO;

}

Androd代码:

/**

* 匹配Luhn算法:可用于检测银行卡卡号

* @param cardNo

* @return

*/

public static boolean matchLuhn(String cardNo) {

int[] cardNoArr = new int[cardNo.length()];

for (int i=0; i<cardNo.length(); i++) {

cardNoArr[i] = Integer.valueOf(String.valueOf(cardNo.charAt(i)));

}

for(int i=cardNoArr.length-2;i>=0;i-=2) {

cardNoArr[i] <<= 1;

cardNoArr[i] = cardNoArr[i]/10 + cardNoArr[i]%10;

}

int sum = 0;

for(int i=0;i<cardNoArr.length;i++) {

sum += cardNoArr[i];

}

return sum % 10 == 0;

}

附(银行卡号格式化):

在输入银行卡号过程中,通常,我们会每隔4位插入一个"-",类似"1332-2131-2313-1231-212"这种的格式
可以通过以下方法实现:

设置textField的代理

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

{

NSString *text = [textField text];

NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];

string = [string stringByReplacingOccurrencesOfString:@"-" withString:@""];

if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {

return NO;

}

text = [text stringByReplacingCharactersInRange:range withString:string];

text = [text stringByReplacingOccurrencesOfString:@"-" withString:@""];

NSString *newString = @"";

while (text.length > 0) {

NSString *subString = [text substringToIndex:MIN(text.length, 4)];

newString = [newString stringByAppendingString:subString];

if (subString.length == 4) {

newString = [newString stringByAppendingString:@"-"];

}

text = [text substringFromIndex:MIN(text.length, 4)];

}

newString = [newString stringByTrimmingCharactersInSet:[characterSet invertedSet]];

if (newString.length >= 24) {

return NO;

}

[textField setText:newString];

return NO;

}

最后,怎么获得不包含符号"-"的银行卡号呢?

[self.textField.text stringByReplacingOccurrencesOfString:@"-" withString:@""]

判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验的更多相关文章

  1. JavaScript 判断用户输入的邮箱及手机格式是否正确

    JavaScript判断用户输入的邮箱格式是否正确.判断用户输入的手机号格式是否正确,下面有个不错的示例,感兴趣的朋友可以参考下. 复制代码代码如下: /*  * 功能:判断用户输入的邮箱格式是否正确 ...

  2. 一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确

    一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确       最近没事研究了下验证码的的动态生成及通过cookie实现HTML页面对用户输入的验证码的校验,简要如下: 1.写 ...

  3. java判断用户输入的是否至少含有N位小数

    判断用户输入的是否至少含有N位小数. 1.当用户输入的是非数字时抛出异常,返回false. 2.当用户输入数字是,判断其数字是否至少含有N位小数,如果不含有,返回false. 3.当用户输入的数字的小 ...

  4. 判断用户输入YES或NO

    #!bin/bash#作者:liusingbon#功能:判断用户输入的是 Yes 或 NOread -p "Are you sure?[y/n]:" surecase $sure ...

  5. alertDialog创建登陆界面,判断用户输入

    alertDialog创建登陆界面,需要获取用户输入的用户名和密码,获取控件对象的时候不能像主布局文件那样获得, 需要在onClickListener中获取,代码如下: public boolean ...

  6. js处理用户输入的银行卡号实现四位一段,并且只能输入数字

    其中ABC是输入框的id.type="tel"可直接呼出数字键盘. <input type="tel" maxlength="24" ...

  7. java应用程序中判断用户输入的一个整数是否在已知数组里。

    import java.util.*; class Example2_5 { public static void main(String args[]) { int start=0,end,midd ...

  8. 关于判断用户输入的是不是int类型,这次没有正则表达式

    末尾没有目的地的出租车,污点证人禁止入内!!! 不同的尝试有不同的方法 关于int类型的判断,我尝试了这么一个方法,可行,只是笨 正则表达式我没有搞清楚,没办法给大家讲解,欢迎各位明白人讲解,或者是我 ...

  9. js 各类判断用户输入字符的格式函数

    1.JS 判断IP格式是否正确: function checkIP(ip) { var regular = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;//正则表达式 if (reg ...

随机推荐

  1. 3、Redis 基础

    Redis的五大数据类型 String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意 ...

  2. 重磅开源:TN文本分析语言

    tn是desert(沙漠之鹰)和tan共同开发的一种用于匹配,转写和抽取文本的语言(DSL).并为其开发和优化了专用的编译器.基于递归下降方法和正则表达式,能解析自然文本并转换为树和字典,识别时间,地 ...

  3. 使用VS Code开发ASP.NET 5 应用程序

    本文简要地翻译了 https://code.visualstudio.com/Docs/runtimes/ASPnet5 并结合我的实践做了一些说明. 准备工作 1.安装VS Code  https: ...

  4. 如何通过一个类名找到它属于哪个jar包?

    最简单的方式: 如果用eclipse选中类名,然后ctrl shift T,就可看到包含比类的包了 最有效的方式: import java.net.URL; /** * 检查class文件属于哪个ja ...

  5. C/C++ char a[ ] 和 char *a 的差别,改变 char *a爆内存错误的原因

    对于一些需要传入参数为 char * temp 指针类的函数: 我们定义一个 char a[10] 或char *a 传进去都是可以的. 但是, 如果该函数是会改变你所传入的参数的值时, 传入 cha ...

  6. cocopads命令行

  7. 小身材大用途,用PrimusUI驾驭你的页面

    “PrimusUI”是自己在借鉴了如今网上很多开源的UI库,再经过自己整理加工的一个简单代码集合. 每个功能块的CSS代码都很少,力求简单易懂,低门槛,代码可根据自己实际情况轻易修改,改到符合自己场景 ...

  8. 使用Apache Server 的ab进行web请求压力测试

    参考:http://www.cnblogs.com/spring3mvc/archive/2010/11/23/2414741.html 自己写代码经常是顺着逻辑写下去,写完后run一下,ok就玩完事 ...

  9. deviceFilters与设备过滤

    本主题是ASP.NET在移动设备上展示的方面的内容 起初看起来deviceFilters与前面的browserCaps类似.同样也会关联到HttpBrowserCapabilities,而在这里用到的 ...

  10. redis+cookies实现session机制(解决 手机浏览器不自动回传cookies导致session不可用问题)

    昨天在手机端测试自己的项目遇到如下情况. 1.在手机上(苹果qq浏览器),登陆时存在session中的图片验证码结果,一直获取不到,考虑是cookies的问题.但是其他网站有貌似可以正常使用cooki ...