add support for PayMV QR scan

This commit is contained in:
2026-05-13 03:36:14 +05:00
parent b452940ed0
commit 6a3738fc2f
13 changed files with 395 additions and 3 deletions
@@ -0,0 +1,48 @@
package sh.sar.basedbank.util
data class PaymvQrData(
val accountNumber: String?,
val amount: String?,
val purpose: String?,
val merchantName: String?
)
object PaymvQrParser {
fun parse(raw: String): PaymvQrData? {
return try {
val root = parseTlv(raw)
// ID 26: Favara/PayMV merchant account info
val merchantInfo = root["26"]?.let { parseTlv(it) }
// ID 54: transaction amount
// ID 59: merchant/recipient name
// ID 62: additional data (sub-ID 08 = purpose)
val additionalData = root["62"]?.let { parseTlv(it) }
PaymvQrData(
accountNumber = merchantInfo?.get("03"),
amount = root["54"],
purpose = additionalData?.get("08"),
merchantName = root["59"]
)
} catch (_: Exception) {
null
}
}
private fun parseTlv(data: String): Map<String, String> {
val result = mutableMapOf<String, String>()
var pos = 0
while (pos + 4 <= data.length) {
val id = data.substring(pos, pos + 2)
val len = data.substring(pos + 2, pos + 4).toIntOrNull() ?: break
pos += 4
if (pos + len > data.length) break
result[id] = data.substring(pos, pos + len)
pos += len
}
return result
}
}