Coverage Summary for Class: BikGenerator (ru.eda.plgn.bizgen.core.generator.impl)

Class Method, % Branch, % Line, % Instruction, %
BikGenerator 100% (2/2) 100% (3/3) 100% (13/13)
BikGenerator$Companion 66.7% (2/3) 50% (4/8) 83.3% (5/6) 76.3% (45/59)
Total 80% (4/5) 50% (4/8) 88.9% (8/9) 80.6% (58/72)


 package ru.eda.plgn.bizgen.core.generator.impl
 
 import ru.eda.plgn.bizgen.core.generator.GeneratorResult
 import ru.eda.plgn.bizgen.core.generator.GeneratorResultWithEscape
 import ru.eda.plgn.bizgen.core.generator.GeneratorStr
 import kotlin.random.Random
 
 /**
  * БИК Генератор.
  *
  * *Генерирует случайный БИК (Банковский идентификационный код).*
  *
  * *Формат БИК: 04XXXXXXX*
  * - *04 — код России (для рублёвых счетов)*
  * - *XXXXXXX — 7 цифр (регион + номер банка)*
  *
  * **See Also:**
  * [Банковский идентификационный код](https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%BD%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4)
  *
  * @author Dmitry_Emelyanenko
  */
 class BikGenerator : GeneratorStr {
   override val uniqueDistance: Int = 130
 
   override fun generate(): GeneratorResult<String> = GeneratorResultWithEscape(data = randomBik())
 
   /** Логика формирования БИКа. */
   companion object {
 
     /**
      * Генерирует случайный БИК (Банковский идентификационный код).
      *
      * Формат БИК: 04XXXXXXX.
      * - 04 — код России (для рублёвых счетов)
      * - XXXXXXX — 7 цифр (регион + номер банка).
      */
     fun randomBik() = randomBik(null)
 
     /**
      * Генерирует случайный БИК (Банковский идентификационный код).
      *
      * Формат БИК: 04XXXXXXX.
      * - 04 — код России (для рублёвых счетов)
      * - XXXXXXX — 7 цифр (регион + номер банка).
      *
      * @param regionCode код региона (1-99), если не указан — выбирается случайный.
      */
     @Suppress("SameParameterValue")
     fun randomBik(regionCode: Int? = null): String {
       val actualRegionCode = regionCode ?: Random.nextInt(1, 100)
       require(actualRegionCode in 1..99) { "Код региона должен быть в диапазоне 1-99" }
 
       // Генерируем 5 случайных цифр для номера банка
       val bankNumber = Random.nextInt(0, 100000).toString().padStart(5, '0')
 
       return "04${actualRegionCode.toString().padStart(2, '0')}$bankNumber"
     }
   }
 }