2016-10-27 14 views
0

誰でもハンガリーのBBANアカウントの番号を検証する方法を教えていただけますか? は、インターネット上で、私は、それが24個の数字長 であることを発見したと形式でハンガリーのBBANの有効性確認

bbbs sssk cccc cccc cccc cccx 
b = National bank code 
s = Branch code 
c = Account number 
x = National check digit 

が、x =国立チェックデジットを計算する方法? は(結果は有効なアカウント番号の1ではありません)私は97で最後の文字とモジュロ残りを削除しようとしていますが、それは 動作しない任意の助け

+0

は、国固有のものであり、彼らはこのトピックで、あなたに指導を与えるために最も有能な組織です。連絡先の詳細__ [ここ](http://www.ecbs.org/iban/hungary-bank-account-number.html)__を見つけることができます。 – holex

答えて

0

を事前に

おかげで私はハンガリーのアカウントの検証を終えました関数。これはこの関数の最初のバージョンですが、うまくいきます。あなたが探しているチェックデジットを計算するためのアルゴリズムとして_HungarianバンキングAssociation_に連絡する必要があるかもしれません

public string sprawdzWegierskitempAccountNumber(string _accountNumberToCheck, bool _iban) //if iban is true then function result will be always IBAN (even if _accountNumberToCheck will be BBAN) { string _accountNumberCorrected = _accountNumberToCheck.Replace(" ", ""); _accountNumberCorrected = _accountNumberCorrected.Replace("-", ""); _accountNumberCorrected = _accountNumberCorrected.Replace("//", ""); _accountNumberCorrected = _accountNumberCorrected.Replace("\", ""); string _accountNumberCorrectedFirst = _accountNumberCorrected; if (_accountNumberCorrected.Length == 16 || _accountNumberCorrected.Length == 24 || _accountNumberCorrected.Length == 28) {

 if (_accountNumberCorrected.Length == 28) //IBAN Account number 
     { 
      _accountNumberCorrected = _accountNumberCorrected.Substring(4, _accountNumberCorrected.Length - 4); //we don't need first four digits (HUxx) 
     } 

     string digitToMultiply = "9731"; 
     int checkResult = 0; 

     //checking first part of account number 
     for (int i = 0; i <= 6; i++) 
     { 
      checkResult = checkResult + int.Parse(_accountNumberCorrected.ToCharArray()[i].ToString()) * int.Parse(digitToMultiply.ToCharArray()[i % 4].ToString()); 
     } 
     checkResult = checkResult % 10; 
     checkResult = 10 - checkResult; 
     if (checkResult == 10) 
     { 
      checkResult = 0; 
     } 
     if (checkResult.ToString() != _accountNumberCorrected.ToCharArray()[7].ToString()) 
     { 
      throw new Exception("Wrong account number"); 
     } 
     else 
     { 
      //if first part it's ok then checking second part of account number 
      checkResult = 0; 
      for (int i = 8; i <= _accountNumberCorrected.Length-2; i++) 
      { 
       checkResult = checkResult + int.Parse(_accountNumberCorrected.ToCharArray()[i].ToString()) * int.Parse(digitToMultiply.ToCharArray()[i % 4].ToString()); 
      } 

      checkResult = checkResult % 10; 
      checkResult = 10 - checkResult; 
      if (checkResult == 10) 
      { 
       checkResult = 0; 
      } 
      if (checkResult.ToString() != _accountNumberCorrected.ToCharArray()[_accountNumberCorrected.Length-1].ToString()) 
      { 
       throw new Exception("Wrong account number"); 
      } 

     } 

     string tempAccountNumber = _accountNumberCorrected + "173000"; 

     var db = 0; var iban = 0; 
     var maradek = 0; 
     string resz = "", ibanstr = "", result = ""; 

     while (true) 
     { 

      if (db == 0) 
      { 
       resz = tempAccountNumber.Substring(0, 9); 
       tempAccountNumber = tempAccountNumber.Substring(9, (tempAccountNumber.Length - 9)); 

      } 

      else 
      { 

       resz = maradek.ToString(); 
       resz = resz + tempAccountNumber.Substring(0, (9 - db)); 
       tempAccountNumber = tempAccountNumber.Substring((9 - db), (tempAccountNumber.Length - 9 + db)); 

      } 

      maradek = int.Parse(resz) % 97; 

      if (maradek == 0) 
       db = 0; 
      else 
       if (maradek < 10) 
        db = 1; 
       else 
        db = 2; 

      if ((tempAccountNumber.Length + db) <= 9) 
       break; 
     } 

     if (maradek != 0) 
     { 
      resz = maradek.ToString(); 
      resz = resz + tempAccountNumber; 
     } 
     else 
      resz = tempAccountNumber; 

     maradek = int.Parse(resz) % 97; ; 
     iban = 98 - maradek; 
     if (iban < 10) 
      ibanstr = "0" + iban.ToString(); 
     else ibanstr = iban.ToString(); 

     if (_accountNumberCorrected.Length == 16) 
     { 
      _accountNumberCorrected = _accountNumberCorrected + "00000000"; 
      _accountNumberCorrectedFirst = _accountNumberCorrectedFirst + "00000000"; 
     } 

     if (_iban) 
     { 
      result = "HU" + ibanstr + _accountNumberCorrected; 
     } 
     else 
     { 
      result = _accountNumberCorrectedFirst; 
     } 

     return result; 
    } 
    else 
    { 
     throw new Exception("Wrong length of account number"); 
    } 
}