From 04d2f35b93f03cb0e64ef5de4184aa7d29e96e1f Mon Sep 17 00:00:00 2001
From: Santhoshkumar Sellavel <Santhoshsellavel@gmail.com>
Date: Thu, 14 Oct 2021 02:33:33 +0530
Subject: [PATCH 1/2] Added validate routing number

---
 src/libs/actions/BankAccounts.js              | 22 +++++++++++++++++++
 .../ReimbursementAccount/BankAccountStep.js   |  3 ++-
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/libs/actions/BankAccounts.js b/src/libs/actions/BankAccounts.js
index c9191083f0ce..d0b96281ed11 100644
--- a/src/libs/actions/BankAccounts.js
+++ b/src/libs/actions/BankAccounts.js
@@ -816,6 +816,27 @@ function updateReimbursementAccountDraft(bankAccountData) {
     Onyx.merge(ONYXKEYS.REIMBURSEMENT_ACCOUNT_DRAFT, bankAccountData);
 }
 
+/**
+ * Checks the given number is a valid US Routing Number
+ * @param {String} number
+ * @returns {Boolean}
+ */
+function validateRoutingNumber(number) {
+    let n = 0;
+    for (let i = 0; i < number.length; i += 3) {
+        n += (parseInt(number.charAt(i), 10) * 3)
+        + (parseInt(number.charAt(i + 1), 10) * 7)
+        + parseInt(number.charAt(i + 2), 10);
+    }
+
+    // If the resulting sum is an even multiple of ten (but not zero),
+    // the aba routing number is valid.
+    if (n !== 0 && n % 10 === 0) {
+        return true;
+    }
+    return false;
+}
+
 export {
     activateWallet,
     addPersonalBankAccount,
@@ -835,4 +856,5 @@ export {
     setWorkspaceIDForReimbursementAccount,
     setBankAccountSubStep,
     updateReimbursementAccountDraft,
+    validateRoutingNumber,
 };
diff --git a/src/pages/ReimbursementAccount/BankAccountStep.js b/src/pages/ReimbursementAccount/BankAccountStep.js
index f76c0d659bcc..ae24c6fa3192 100644
--- a/src/pages/ReimbursementAccount/BankAccountStep.js
+++ b/src/pages/ReimbursementAccount/BankAccountStep.js
@@ -25,6 +25,7 @@ import {
     setupWithdrawalAccount,
     showBankAccountErrorModal,
     updateReimbursementAccountDraft,
+    validateRoutingNumber,
 } from '../../libs/actions/BankAccounts';
 import ONYXKEYS from '../../ONYXKEYS';
 import compose from '../../libs/compose';
@@ -86,7 +87,7 @@ class BankAccountStep extends React.Component {
         if (!CONST.BANK_ACCOUNT.REGEX.IBAN.test(this.state.accountNumber.trim())) {
             errors.accountNumber = true;
         }
-        if (!CONST.BANK_ACCOUNT.REGEX.SWIFT_BIC.test(this.state.routingNumber.trim())) {
+        if (!CONST.BANK_ACCOUNT.REGEX.SWIFT_BIC.test(this.state.routingNumber.trim()) || !validateRoutingNumber(this.state.routingNumber.trim())) {
             errors.routingNumber = true;
         }
         if (!this.state.hasAcceptedTerms) {

From cae50ccd1ba5a2ccaee0d84d750977b5b50b2d82 Mon Sep 17 00:00:00 2001
From: Santhoshkumar Sellavel <Santhoshsellavel@gmail.com>
Date: Wed, 20 Oct 2021 20:06:16 +0530
Subject: [PATCH 2/2] PR Suggestions

---
 src/libs/actions/BankAccounts.js | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/libs/actions/BankAccounts.js b/src/libs/actions/BankAccounts.js
index 578b4dec0730..96d7bd107ca3 100644
--- a/src/libs/actions/BankAccounts.js
+++ b/src/libs/actions/BankAccounts.js
@@ -822,6 +822,7 @@ function updateReimbursementAccountDraft(bankAccountData) {
 
 /**
  * Checks the given number is a valid US Routing Number
+ * using ABA routingNumber checksum algorithm: http://www.brainjar.com/js/validation/
  * @param {String} number
  * @returns {Boolean}
  */
@@ -829,12 +830,12 @@ function validateRoutingNumber(number) {
     let n = 0;
     for (let i = 0; i < number.length; i += 3) {
         n += (parseInt(number.charAt(i), 10) * 3)
-        + (parseInt(number.charAt(i + 1), 10) * 7)
-        + parseInt(number.charAt(i + 2), 10);
+            + (parseInt(number.charAt(i + 1), 10) * 7)
+            + parseInt(number.charAt(i + 2), 10);
     }
 
     // If the resulting sum is an even multiple of ten (but not zero),
-    // the aba routing number is valid.
+    // the ABA routing number is valid.
     if (n !== 0 && n % 10 === 0) {
         return true;
     }