Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 验证路由号码_Java_Android - Fatal编程技术网

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

如何在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, 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>