会员ID的复杂JS验证

时间:2016-06-27 06:54:09

标签: javascript validation

我们的用户拥有基于某种逻辑生成的会员ID。我们希望使用JS来验证他们是否在传递给服务器之前输入了正确的成员资格代码。

请参阅以下内容:

以下是用于验证我们的会员编号的Modulus 7算法的示例。在事务文件中传递给我们的成员资格编号(见上面的格式)应该符合这一点。

8 digit number – (7 x Quotient (8 digit number / 7))

If 8 digit number = 71231231----------------------------- (A)

E.g. 71231231 – (7 x Quotient (71231231 / 7))

= 71231231 – (7 x Quotient (10175890.142857142857142857142857))

= 71231231 – (7 x 10175890)

= 71231231 - 71231230

= 1 ---------------------------------------------------- (B)

Therefore the membership number = (B) concatenated to the end of  (A) = 712312311

正确数字的示例: 00999999033,00999999044

2 个答案:

答案 0 :(得分:1)

改写您期望的算法,

您的会员ID有9位数字,没有前导零。这个数字是通过在相同的8位数后面跟随前8位数的7的模数来进行的。

示例:

  A valid ID:  00999999044

  The breakdown of this should be [99999904] [99999904 mod 7]

您可以通过JS的以下功能来检查这个

function checkID(id) {

   id = parseInt(id);

   if (String(id).length !== 9)              //Fail if n digits are incorrect
      return false;

   var firstEight = Math.floor(id / 10);     //Get first 8 digits
   var modulo7 = firstEight % 7;             //Get the modulo

   return id === firstEight * 10 + modulo7;  //Check if modulo is after the 8 digits 

}

答案 1 :(得分:-1)

您可以做的是在将数据提交到服务器之前使用一个表单来执行模数逻辑。

HTML

<form id="form">
  <input id="membershipNumber" required>
  <button type="submit">Submit</button>
</form>

JS

document.getElementById('form').addEventListener('submit', function(e) {
  e.preventDefault();
  e.stopPropagation();

  var membershipNumber = document.getElementById('membershipNumber').value;
  var newMembershipNumber = membershipNumber + String(setModulus7(membershipNumber));

  //send new membership number to backend   
  console.log(newMembershipNumber);
});

function setModulus7(value) {
  var checkDigit = value - (7 * (Math.floor(value / 7)));
  return checkDigit;
}

https://jsfiddle.net/34d9o7rf/1