Skip to content

Instantly share code, notes, and snippets.

@mhf-ir
Created November 24, 2017 09:48
Show Gist options
  • Save mhf-ir/c17374fae395a57c9f8e5fe7a92bbf23 to your computer and use it in GitHub Desktop.
Save mhf-ir/c17374fae395a57c9f8e5fe7a92bbf23 to your computer and use it in GitHub Desktop.
iranian sheba bank validation javascript | اعتبار سنجی کد شبا با جاوا اسکریپت
function iso7064Mod97_10(iban) {
var remainder = iban,
block;
while (remainder.length > 2){
block = remainder.slice(0, 9);
remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
}
return parseInt(remainder, 10) % 97;
}
function validateIranianSheba(str) {
var pattern = /IR[0-9]{24}/;
if (str.length !== 26) {
return false;
}
if (!pattern.test(str)) {
return false;
}
var newStr = str.substr(4);
var d1 = str.charCodeAt(0) - 65 + 10;
var d2 = str.charCodeAt(1) - 65 + 10;
newStr += d1.toString() + d2.toString() + str.substr(2, 2);
var remainder = iso7064Mod97_10(newStr);
if (remainder !== 1) {
return false;
}
return true;
};
console.log(validateIranianSheba('ENTER SHEBA NUMBER HERE IT\'SRETURN TRUE OR FALSE'));
@hasanparasteh
Copy link

Here is the typescript version:

export function iso7064Mod97_10(iban: string): number {
    let remainder: string = iban;
    let block: string;

    while (remainder.length > 2) {
        block = remainder.slice(0, 9);
        remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
    }

    return parseInt(remainder, 10) % 97;
}

export function validateIranianSheba(iban: string): boolean {
    if (!iban.startsWith('IR')) {
        iban = 'IR' + iban;
    }

    const pattern = /IR[0-9]{24}/;

    if (iban.length !== 26) {
        return false;
    }

    if (!pattern.test(iban)) {
        return false;
    }

    let testString = iban.substring(4);
    const d1 = iban.charCodeAt(0) - 65 + 10;
    const d2 = iban.charCodeAt(1) - 65 + 10;
    testString += d1.toString() + d2.toString() + iban.substring(2, 2);

    if (iso7064Mod97_10(testString) !== 1) {
        return false;
    }
    return true;
}

the part you are creating test string at iban.substring(2, 2); is wrong! you should switch it to iban.substring(2, 4). the way the substr works is a little different than substring. substring expect the end in the second argument not length!

Thanks for your contribution. I fixed that problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment