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; }