Luhn 算法(也称为 模数10 或 mod 10 算法)是一种简单的校验和过程,用于验证各种标识号,例如信用卡号,加拿大社会保险号。此算法旨在保护再次输入错误或意外的错误,而不是恶意攻击。大多数信用卡公司都采用此算法,因为该算法可在公共领域使用,并且任何人都可以使用。
以下是Luhn算法中涉及的步骤。
步骤1 :从最右边的数字开始,我们应该每隔一个数字加倍。
第2 步:当我们将数字加倍并获得两位数的乘积时,则应添加乘积的数字。
步骤3 :计算所有数字的总和。
步骤4 :如果总和可以除以10,即总和模10为0,则数字有效,否则无效。
由于 90 mod 10 为0 ,因此这是有效的信用卡号。
<b>public</b> <b>class</b> LuhnAlgorithmMain { <b>public</b> <b>static</b> <b>void</b> main(String[] args) { String cardNumber=<font>"1358954993914435"</font><font>; <b>boolean</b> validCreditCardNumber = isValidCreditCardNumber(cardNumber); <b>if</b>(validCreditCardNumber) { System.out.println(cardNumber+</font><font>" is valid as per luhn algorithm"</font><font>); } <b>else</b> { System.out.println(cardNumber+</font><font>" is not valid as per luhn algorithm"</font><font>); } } <b>public</b> <b>static</b> <b>boolean</b> isValidCreditCardNumber(String cardNumber) { </font><font><i>// int array for processing the cardNumber</i></font><font> <b>int</b>[] cardIntArray=<b>new</b> <b>int</b>[cardNumber.length()]; <b>for</b>(<b>int</b> i=0;i<cardNumber.length();i++) { <b>char</b> c= cardNumber.<b>char</b>At(i); cardIntArray[i]= Integer.parseInt(</font><font>""</font><font>+c); } <b>for</b>(<b>int</b> i=cardIntArray.length-2;i>=0;i=i-2) { <b>int</b> num = cardIntArray[i]; num = num * 2; </font><font><i>// step 1</i></font><font> <b>if</b>(num>9) { num = num%10 + num/10; </font><font><i>// step 2</i></font><font> } cardIntArray[i]=num; } <b>int</b> sum = sumDigits(cardIntArray); </font><font><i>// step 3</i></font><font> System.out.println(sum); <b>if</b>(sum%10==0) </font><font><i>// step 4</i></font><font> { <b>return</b> <b>true</b>; } <b>return</b> false; } <b>public</b> <b>static</b> <b>int</b> sumDigits(<b>int</b>[] arr) { <b>return</b> Arrays.stream(arr).sum(); } } </font>