code: public static boolean alg_52(int[] blz, int[] number) {
          boolean ok;
  
          if (number[0] == 9) {
              ok = alg_20(blz, number);
  
          } else {
              //Kontonummer muss 8-stellig sein (mgl: number[2] darf 0 sein, d.h. Kontonummer faengt mit 0 an
              if (number[0] != 0 || number[1] != 0 || number[2] == 0) {
                  ok = false;
  
              } else {
                  int[] weights = new int[]{4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
  
                  //ESER-Nummer bauen
                  int[] eser = new int[12];
  
                  int knstartindex = 4;
                  while (number[knstartindex] == 0) {
                      knstartindex++;
                  }
  
                  // kontonummer -> eser
                  int i = 11;
                  for (int j = 9; j >= knstartindex; j--, i--) {
                      eser[i] = number[j];
                  }
  
                  //Pruefziffer number[3] muss 0 gesetzt werden
                  int indexOfPruefziffer = i;
                  eser[i--] = 0;
  
                  //erste Stelle der Kontonummer;
                  eser[i--] = number[2];
  
                  for (int j = 7; j > 3; j--, i--) {
                      eser[i] = blz[j];
                  }
  
                  //Ende Eser-Nummer bauen
                  int sum = addProducts(eser, 0, 11, weights, false);
                  int crc = sum % 11;
  
                  int factor = 0;
                  boolean found = false;
  
                  while (!found && factor < 10) {
                      int tocheck = (crc + factor * weights[indexOfPruefziffer]) % 11;
                      if (tocheck == 10) {
                          crc = factor;
                          found = true;
                      }
                      factor++;
                  }
  
                  ok = found && number[3] == crc;
              }
          }
  
          return ok;
      }
docs: TODO: more tests