iOS/Android银行卡号格式校验:Luhn算法实战

0 下载量 87 浏览量 更新于2024-09-02 收藏 47KB PDF 举报
在软件开发中,特别是在处理用户输入时,对银行卡号、手机号码等敏感数据进行格式校验是至关重要的。本文主要讲解的是如何使用Luhn算法来验证银行卡号的有效性。Luhn算法,也被称为Mod 10校验或信用卡校验,是一种广泛应用于信用卡和借记卡号的简单校验规则,用于检查数字序列是否符合该类型的卡片格式。 在iOS和Android平台中,都有相应的实现方法来完成这项任务。首先,来看一下iOS的实现: ```swift + (BOOL) checkCardNo:(NSString *)cardNo { int oddSum = 0; // 奇数位求和 int evenSum = 0; // 偶数位求和 int allSum = 0; int cardNoLength = [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; // 验证失败 } } ``` 这段代码首先获取输入的银行卡号字符串,然后遍历每一位数字,根据奇偶性执行不同的计算规则:偶数位乘以2并可能减去9(如果结果大于等于10),奇数位则直接相加。最后,将所有奇数位和偶数位求和,并加上最后一位数字,如果这个总和能被10整除,则说明银行卡号符合Luhn算法,反之则不正确。 对于Android平台,代码类似但语法不同: ```java public static boolean matchLuhn(String cardNo) { int[] cardNoArr = new int[cardNo.length()]; for (int i = 0; i < cardNo.length(); i++) { cardNoArr[i] = Integer.parseInt(cardNo.substring(i, i + 1)); } // Luhn算法的具体步骤略同于iOS代码,这里省略了具体计算过程 if ((allSum % 10) == 0) { return true; // 验证通过 } else { return false; // 验证失败 } } ``` 总结来说,Luhn算法的银行卡号验证是通过逐位处理和加权求和的方式进行,对于奇数位和偶数位应用不同的计算规则,然后判断最终的校验和是否能被10整除。在实际开发中,这种方法可以帮助确保用户输入的银行卡号格式正确,减少无效请求对服务器的压力,提升用户体验。