diff options
Diffstat (limited to 'src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')
-rw-r--r-- | src/tools/iban-validator-and-parser/iban-validator-and-parser.vue | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue b/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue new file mode 100644 index 0000000..d5cdc02 --- /dev/null +++ b/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue @@ -0,0 +1,71 @@ +<script setup lang="ts"> +import { extractIBAN, friendlyFormatIBAN, isQRIBAN, validateIBAN } from 'ibantools'; +import { getFriendlyErrors } from './iban-validator-and-parser.service'; +import type { CKeyValueListItems } from '@/ui/c-key-value-list/c-key-value-list.types'; + +const rawIban = ref(''); + +const ibanInfo = computed<CKeyValueListItems>(() => { + const iban = rawIban.value.toUpperCase().replace(/\s/g, '').replace(/-/g, ''); + + if (iban === '') { + return []; + } + + const { valid: isIbanValid, errorCodes } = validateIBAN(iban); + const { countryCode, bban } = extractIBAN(iban); + const errors = getFriendlyErrors(errorCodes); + + return [ + + { + label: 'Is IBAN valid ?', + value: isIbanValid, + showCopyButton: false, + }, + { + label: 'IBAN errors', + value: errors.length === 0 ? undefined : errors, + hideOnNil: true, + showCopyButton: false, + }, + { + label: 'Is IBAN a QR-IBAN ?', + value: isQRIBAN(iban), + showCopyButton: false, + }, + { + label: 'Country code', + value: countryCode, + }, + { + label: 'BBAN', + value: bban, + }, + { + label: 'IBAN friendly format', + value: friendlyFormatIBAN(iban), + }, + ]; +}); + +const ibanExamples = [ + 'FR7630006000011234567890189', + 'DE89370400440532013000', + 'GB29NWBK60161331926819', +]; +</script> + +<template> + <div> + <c-input-text v-model:value="rawIban" placeholder="Enter an IBAN to check for validity..." test-id="iban-input" /> + + <c-key-value-list :items="ibanInfo" my-5 /> + + <c-card title="Valid IBAN examples"> + <div v-for="iban in ibanExamples" :key="iban"> + <c-text-copyable :value="iban" font-mono :displayed-value="friendlyFormatIBAN(iban)" /> + </div> + </c-card> + </div> +</template> |