Imports System.Collections.Generic
Imports System.Text.RegularExpressions
Imports Microsoft.VisualBasic
Public Enum AccountFormat
Public ReadOnly TemenosAcctCheckDigitWgt As Integer() = New Integer() {3, 2, 7, 6, 5, 4, _
Dim name As String = "GREY TESTING"
Console.WriteLine("Name Check [" & name & "]: " & checkName(name))
Dim acctToCheck As String = "06500101000035"
Dim validTemenosAcct As String = ""
Dim isTemenosAcct As Boolean = IsTemenosAcctValid(acctToCheck, validTemenosAcct)
Console.WriteLine("Is Temenos Acct: " & isTemenosAcct.ToString())
Console.WriteLine("Valid Temenos Acct: " & validTemenosAcct)
Dim acctFormat As AccountFormat = GetAccountFormat(acctToCheck)
Console.WriteLine("Account Format: " & acctFormat.ToString())
If acctFormat = AccountFormat.LegacySavePlus Then
Dim saveplusAcctNoPrefix As String = acctToCheck.Substring(acctToCheck.Length - 11)
Console.WriteLine("SavePLUS Account (No Prefix): " & saveplusAcctNoPrefix)
Console.WriteLine("SavePLUS Account (Pos 4 Len 2): " & saveplusAcctNoPrefix.Substring(3, 2))
Console.WriteLine("SavePLUS Account (Pos 9 Len 2): " & saveplusAcctNoPrefix.Substring(8, 2))
Console.WriteLine("To SavePLUS Account (Exclude Prefix): " & ToLegacySavePlusAccount(saveplusAcctNoPrefix, True))
Console.WriteLine("To SavePLUS Account (Exclude Prefix): " & ToLegacySavePlusAccount(acctToCheck, True))
Dim trxAmountStr As String = "350.00"
Console.WriteLine(((Convert.ToDouble(trxAmountStr) * 100).ToString("F0")).PadLeft(12, "0"))
Public Function IsTemenosAcctValid(ByVal accountNumber As String, ByRef validTemenosAcct As String) As Boolean
Dim computedWeights As List(Of Integer) = New List(Of Integer)()
Dim ecardsuiteBankAcctType As List(Of String) = getAllowedBankTypeList()
accountNumber = accountNumber.Trim()
Dim requiredLength As Integer = TemenosAcctCheckDigitWgt.Length
validTemenosAcct = String.Empty
Dim trimmedAcctNo As String = accountNumber
If Not Regex.IsMatch(accountNumber, "^[0-9]+$") Then
ElseIf accountNumber.Length = 16 AndAlso ecardsuiteBankAcctType.Contains(accountNumber.Substring(0, 2)) Then
trimmedAcctNo = accountNumber.Substring(accountNumber.Length - 10)
ElseIf accountNumber.Length - 1 > requiredLength Then
Dim tempAccountNumber As String = If(trimmedAcctNo.Length - 1 < requiredLength, trimmedAcctNo.PadLeft(requiredLength + 1, "0"c), trimmedAcctNo)
Dim tempAccountNoWithCheckDigit As String = tempAccountNumber
tempAccountNumber = tempAccountNumber.Substring(0, requiredLength)
Dim checkDigitSum As Integer = 0
Dim checkDigitWeightCounter As Integer = 0
For Each c As Char In tempAccountNumber
If checkDigitWeightCounter = tempAccountNumber.Length - 1 Then
Dim num As Integer = Integer.Parse(c.ToString())
Dim computedVal As Integer = num * TemenosAcctCheckDigitWgt(checkDigitWeightCounter)
computedWeights.Add(computedVal)
checkDigitWeightCounter += 1
checkDigitSum += computedVal
Dim mod11 As Integer = checkDigitSum Mod 11
Dim tempCheckDigit As Integer = 11 - mod11
Dim checkDigit As Integer
If tempCheckDigit > 9 Then
checkDigit = tempCheckDigit - 3
checkDigit = tempCheckDigit
validTemenosAcct = String.Concat(trimmedAcctNo, checkDigit)
Return tempAccountNoWithCheckDigit = String.Concat(tempAccountNumber, checkDigit)
Public Function GetAccountFormat(ByVal accountNumber As String) As AccountFormat
Dim validTemenosAcct As String = String.Empty
Dim methodName As String = "GetAccountFormat()"
Dim acctFormat As AccountFormat = AccountFormat.Unknown
Console.WriteLine(methodName & " - Validating Account Number if legacy SavePLUS or Temenos Account...")
If accountNumber Is Nothing Then
Console.WriteLine(methodName & " - - WARNING! Account number to check is null, setting account number to string.Empty...")
accountNumber = String.Empty
Console.WriteLine(methodName & " - - Input Account Number: " & accountNumber)
If String.IsNullOrEmpty(accountNumber) Then
acctFormat = AccountFormat.Unknown
Console.WriteLine(methodName & " - - Account Number: " & acctFormat.ToString())
accountNumber = accountNumber.Trim()
If accountNumber.StartsWith("065") And accountNumber.Length = 14 Then
acctFormat = AccountFormat.LegacySavePlus
Console.WriteLine(methodName & " - - Account Number: " & acctFormat.ToString())
ElseIf accountNumber.StartsWith("PHP") And accountNumber.Length = 16 Then
acctFormat = AccountFormat.Internal
Console.WriteLine(methodName & " - - Account Number: " & acctFormat.ToString())
Dim isTemenosAcct As Boolean = IsTemenosAcctValid(accountNumber, validTemenosAcct)
If Not isTemenosAcct Then
acctFormat = AccountFormat.Unknown
Console.WriteLine(methodName & " - - Account Number: " & acctFormat.ToString())
If validTemenosAcct.StartsWith("2") Then
acctFormat = AccountFormat.Peso
Console.WriteLine(methodName & " - - Account Number: " & acctFormat.ToString())
ElseIf validTemenosAcct.StartsWith("3") Then
acctFormat = AccountFormat.Dollar
Console.WriteLine(methodName & " - - Account Number: " & acctFormat.ToString())
acctFormat = AccountFormat.Unknown
Console.WriteLine(methodName & " - - Account Number: " & acctFormat.ToString())
Public Function ToLegacySavePlusAccount(ByVal accountNo As String, Optional ByVal excludePrefix As Boolean = False) As String
Dim acctToCheck As String = String.Empty
If accountNo Is Nothing Then
acctToCheck = String.Empty
acctToCheck = accountNo.Trim()
If acctToCheck = String.Empty Then
Return String.Empty.PadLeft(14, "0")
Dim acctLegacySavePlus As String = acctToCheck
Dim acctSavePlusWithTypePrefix As New List(Of String)
acctSavePlusWithTypePrefix.Add("00065")
acctSavePlusWithTypePrefix.Add("10065")
acctSavePlusWithTypePrefix.Add("20065")
If acctLegacySavePlus.Length = 16 AndAlso acctSavePlusWithTypePrefix.Contains(acctLegacySavePlus.Substring(0, 5)) Then
acctLegacySavePlus = acctLegacySavePlus.Substring(2)
ElseIf acctLegacySavePlus.Length > 14 Then
acctLegacySavePlus = acctLegacySavePlus.Substring(acctLegacySavePlus.Length - 14)
ElseIf Not (acctLegacySavePlus.Length = 14 AndAlso acctLegacySavePlus.StartsWith("065")) Then
acctLegacySavePlus = String.Concat("065", acctLegacySavePlus)
acctLegacySavePlus = acctLegacySavePlus.Substring(acctLegacySavePlus.Length - 11)
Return acctLegacySavePlus
Private Function getAllowedBankTypeList() As List(Of String)
Dim lst As New List(Of String)
Private Function checkName(ByVal Myname As String) As Boolean
If Myname.Length > 0 Then
Dim DataSame As String = ""
Do While Not Data > MyName.Length
Data2 = Mid(Myname, Data, 1)
Case 48 To 57, 97 To 122, 65 To 90, 44 To 46, 39, 32
If Asc(Data2) = DataSame Then