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"
}
}
}