Java 验证路由号码
如何在java中验证银行路由号码? 有人能帮我吗。 比如说Java 验证路由号码,java,android,Java,Android,如何在java中验证银行路由号码? 有人能帮我吗。 比如说 void boolean validate(String str){ // some code return true; //if valid otherwise return false } 我找到了解决办法。使用这种简单的方法验证银行路由号码 public boolean validateRoutingNumber(String s) { int checksum=0, len=0, sum=0, mo
void boolean validate(String str){
// some code
return true; //if valid otherwise return false
}
我找到了解决办法。使用这种简单的方法验证银行路由号码
public boolean validateRoutingNumber(String s) {
int checksum=0, len=0, sum=0, mod = 0;
len = s.length();
if(len != 9){
return false;
}else {
String newString = s.substring(s.length()-1);
checksum = Integer.parseInt(newString);
sum = (7*(Integer.parseInt(""+s.charAt(0))+Integer.parseInt(""+s.charAt(3))+ Integer.parseInt(""+s.charAt(6)))) +
(3*(Integer.parseInt(""+s.charAt(1))+Integer.parseInt(""+s.charAt(4))+ Integer.parseInt(""+s.charAt(7))))+
(9*(Integer.parseInt(""+s.charAt(2))+Integer.parseInt(""+s.charAt(5))));
mod = sum % 10;
if(mod == checksum)
return true;
else
return false;
}
}
为了好玩,我写了一个Angular js指令来做同样的事情:
angular.module('ldPortal.directives')
.directive('routingnumber', function(){
return {
// only use as an attribute
restrict: 'A',
require: 'ngModel',
link: function(scope, elem, attr, ctrl){
var regex = new RegExp('^[0-9]{9}$','');
var num_at = function(str, index){
try {
return parseInt(str.charAt(index))
}catch (execption){
console.write(execption);
}
};
var validate = function(value){
if(! (value)){
return false;
}
var strVal = value.toString();
if (!regex.test(strVal)){
return false;
}
var checksum = parseInt(strVal.substr(strVal.length-1));
var sum = 0;
sum += 7 * (num_at(strVal, 0)+num_at(strVal, 3)+num_at(strVal,6));
sum += 3 * (num_at(strVal, 1)+num_at(strVal, 4)+num_at(strVal, 7));
sum += 9 * (num_at(strVal, 2)+num_at(strVal, 5));
var mod = sum % 10;
return checksum == mod;
};
ctrl.$parsers.push(function(value){
var is_valid = validate(value);
ctrl.$setValidity('routingnumber', is_valid);
return is_valid ? value : undefined;
});
ctrl.$formatters.push(function(value){
var is_valid = validate(value);
ctrl.$setValidity('routingnumber', is_valid);
return value;
});
}
};
});
下面是python的例子:
def validate_routing_number(routing_number):
# quick easy validations
if routing_number is None or routing_number == '':
return False
invalid_routing_message = 'invalid routing number'
if not re.match(r'^[0-9]{9}$', routing_number):
return False
# here is the more complicated validation!
checksum = int(routing_number[-1]) # last digit
sum = 0 # http://en.wikipedia.org/wiki/Routing_transit_number
sum += 7 * (int(routing_number[0])+int(routing_number[3])+int(routing_number[6]))
sum += 3 * (int(routing_number[1])+int(routing_number[4])+int(routing_number[7]))
sum += 9 * (int(routing_number[2])+int(routing_number[5]))
mod = sum % 10
return checksum != mod
我创建了一个简单的路由验证器,希望它能工作 路线编号指示器: 导入静态java.lang.Character.getNumericValue
public static class RoutingNumberValidator {
public boolean isValid(String value) {
boolean isValid = value != null && value.matches("[0-9]{9}");
if (isValid) {
int check = 0;
for ( int index = 0; index < 3; index++ ) {
int pos = index * 3;
check += getNumericValue(value.charAt(pos)) * 3;
check += getNumericValue(value.charAt(pos + 1)) * 7;
check += getNumericValue(value.charAt(pos + 2));
}
isValid = check != 0 && check % 10 == 0;
}
return isValid;
}
}
公共静态类RoutingNumberValidator{
公共布尔值isValid(字符串值){
布尔值isValid=value!=null&&value.matches(“[0-9]{9}”);
如果(有效){
整数检查=0;
对于(int-index=0;index<3;index++){
int pos=索引*3;
check+=getNumericValue(value.charAt(pos))*3;
check+=getNumericValue(value.charAt(pos+1))*7;
检查+=getNumericValue(value.charAt(位置+2));
}
isValid=check!=0&&check%10==0;
}
返回有效;
}
}
路线编号rValidatorTest:
public class RoutingNumberValidatorTest {
private List<String> validRoutingNumbers = Arrays.asList("122105155", "082000549");
private List<String> invalidRoutingNumbers = Arrays.asList("1232101155", "032000549");
@Test
public void isValid() throws Exception {
RoutingNumberValidator routingNumberValidator = new RoutingNumberValidator();
validRoutingNumbers.forEach(it-> assertThat(routingNumberValidator.isValid(it)).as("Invalid Routing Number should not be valid %s", it).isTrue());
invalidRoutingNumbers.forEach(it-> assertThat(routingNumberValidator.isValid(it)).as("Invalid Routing Number should not be valid %s", it).isFalse());
}
}
public class RoutingNumberValidatorTest{
私有列表validuldingNumbers=Arrays.asList(“122105155”、“082000549”);
私有列表invalidRoutingNumbers=Arrays.asList(“1232101155”、“032000549”);
@试验
public void isValid()引发异常{
RoutingNumberValidator RoutingNumberValidator=新RoutingNumberValidator();
validRoutingNumbers.forEach(it->assertThat(routingNumberValidator.isValid(it)).as(“无效的路由号码不应是有效的%s”,it).isTrue());
invalidRoutingNumbers.forEach(it->assertThat(routingNumberValidator.isValid(it)).as(“无效的路由号码不应是有效的%s”,it).isFalse());
}
}
我知道这个问题很老,已经被回答过很多次了,但是这个问题的答案非常简洁,非常有效。所以我想我会分享
validateRoutingNumber(num: string) {
// Run through each digit and calculate the total.
let n = 0;
for (let i = 0; i < num.length; i += 3) {
n += parseInt(num.charAt(i), 10) * 3
+ parseInt(num.charAt(i + 1), 10) * 7
+ parseInt(num.charAt(i + 2), 10);
}
// If the resulting sum is an even multiple of ten (but not zero),
// the aba routing number is good.
if (n != 0 && n % 10 == 0) {
return true;
} else {
return false;
}
}
validateRoutingNumber(num:string){
//把每一位数字通读一遍,然后计算总数。
设n=0;
for(设i=0;i
请找到需要路由号码验证器的用户
路由号码.validator.ts
在您的组件.component.ts中:
在yourComponent.component.html中:
路由号码是必需的
路由号码无效
您能用文字描述一下有效数字是什么样子吗?也给我们举一些例子,,请在谷歌搜索2分钟:查看此http://www.brainjar.com/js/validation/
或此http://geek.michaelgrace.org/2013/12/validating-bank-routing-numbers-in-javascript/
或此http://www.freevbcode.com/ShowCode.asp?ID=6582
@nem你为什么让所有链接都不可链接?@Duncan,我想强调一下。当我意识到编辑为时已晚:)你知道有效路由号码的结构因国家而异吗?我认为此代码不正确,因为它基于公认的答案,我认为这也是不正确的。你能提供一个此逻辑阻止的有效银行路由号码的示例吗?123123
有效,但不被本规范所接受。代码只占9位数字中的8位,而且数字的权重不准确(参见道格对公认答案的准确评论)。这很奇怪。我已经在我们的网站上使用了一年多的代码,从来没有遇到过问题。我认为这段代码是不正确的,因为它基于公认的答案,我认为这也是不正确的。当答案询问Java时,它也是用python编写的。你确定这段代码是正确的吗?它甚至没有计算全部9位数字。它只计算8位数。此外,您应该将第一组数字乘以3,第二组数字乘以7,第三组数字乘以1。请参阅:处的适当算法,或者您的代码应该返回true或false,但您将字符串打印到控制台中,这并不是他想要的。另外,您的算法似乎有一些逻辑问题。我认为您没有使用真实的银行路由号码测试代码,而且您可能只是用代码编写一些解释来澄清问题。您的代码应该尽可能短,这意味着不需要放置package/import/main/;只需完成这项工作的部分就足够了。代码确实有效,需要稍加修改,但任何美国路由号码都将被确认有效。我注意到加权后的前八位数字之和需要从下一个十的倍数中减去,因此mod=10-(总和%10)
validateRoutingNumber(num: string) {
// Run through each digit and calculate the total.
let n = 0;
for (let i = 0; i < num.length; i += 3) {
n += parseInt(num.charAt(i), 10) * 3
+ parseInt(num.charAt(i + 1), 10) * 7
+ parseInt(num.charAt(i + 2), 10);
}
// If the resulting sum is an even multiple of ten (but not zero),
// the aba routing number is good.
if (n != 0 && n % 10 == 0) {
return true;
} else {
return false;
}
}
import { AbstractControl, ValidationErrors } from '@angular/forms';
export const routingNumberValidator = (): ((AbstractControl) => ValidationErrors | null) => {
return (control: AbstractControl): ValidationErrors | null => {
const targetValue = control.value;
if (!targetValue) {
return null;
}
const digits = targetValue.split('').map(d => parseInt(d, 10));
const checksum = 3 * (digits[0] + digits[3] + digits[6]) + 7 * (digits[1] + digits[4] + digits[7]) + (digits[2] + digits[5] + digits[8]);
return (checksum % 10 === 0) ? null : { routingnumber: true };
};
};
this.yourForm = this.fb.group({
routingNumber: [null, Validators.compose([
Validators.required,
routingNumberValidator()
])]
});
<nz-form-control [nzErrorTip]="routingNumberErrorTemplate">
<input
nz-input
formControlName="routingNumber"
id="routingNumber">
</nz-form-control>
<ng-template
#routingNumberErrorTemplate
let-control>
<span data-cy="routing-number-input-error">
<ng-container *ngIf="control.hasError('required')">The routing number is required</ng-container>
<ng-container *ngIf="control.hasError('routingnumber')">The routing number is invalid</ng-container>
</span>
</ng-template>