#include <stdio.h>
#include <string.h>
#include <ctype.h>
void mask_credit_card(const char *input, char *out, size_t out_size) {
size_t len = strlen(input);
if (len + 1 > out_size) {
// Output buffer too small
if (out_size > 0) out[0] = '\0';
return;
}
// Copy original into output
strcpy(out, input);
// Count digits from the end
int digits_seen = 0;
for (int i = (int)len - 1; i >= 0; i--) {
if (isdigit((unsigned char)out[i])) {
digits_seen++;
// Keep last 4 digits visible
if (digits_seen > 4) {
out[i] = '*';
}
}
}
}
int main() {
const char *cc = "1234-5678-9102-8888";
char masked[64] = "";
mask_credit_card(cc, masked, sizeof(masked));
printf("%s\n", masked);
masked[0] = '\0';
mask_credit_card("1234567891028888", masked, sizeof(masked));
printf("%s\n", masked);
return 0;
}
/*
run:
****-****-****-8888
************8888
*/