Input Validation Patterns
Checksum Validate
A checksum condenses several input characters into one value that can be checked.
checksum
The loop accumulates each digit into a compact validation total.
expected value
The final comparison turns the checksum into an explicit pass or fail status.
Checksum Validate
checksum_validate.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int digitChecksum(const char *text) {
int sum = 0;
for (int i = 0; text[i] != '\0'; i++) {
sum += text[i] - '0';
}
return sum;
}
int main(void) {
int useAlt = 0;
const char *digits = useAlt ? "1235" : "1234";
int expected = 10;
int checksum = digitChecksum(digits);
int ok = checksum == expected;
printf("useAlt=%d digits=%s checksum=%d ok=%d\n", useAlt, digits, checksum, ok);
return 0;
}
#include <stdio.h>
int digitChecksum(const char *text) {
int sum = 0;
for (int i = 0; text[i] != '\0'; i++) {
sum += text[i] - '0';
}
return sum;
}
int main(void) {
int useAlt = 1;
const char *digits = useAlt ? "1235" : "1234";
int expected = 10;
int checksum = digitChecksum(digits);
int ok = checksum == expected;
printf("useAlt=%d digits=%s checksum=%d ok=%d\n", useAlt, digits, checksum, ok);
return 0;
}
useAlt ← 0, digits ← 1234, expected ← 10
11int main(void) {12 int useAlt→ 0 = 0; //@useAlt=113 const char *digits→ 1234 = useAlt0 ? "1235" : "1234";14 int expected→ 10 = 10;15 int checksum = digitChecksum(digits1234);16 int ok = checksum == expected;sum ← 0
3int digitChecksum(const char *text1234) {4 int sum→ 0 = 0;5 for (int i = 0; text[i] != '\0'; i++) {sum ← 1
pass 1 of 44int sum = 0;5for (int i0 = 0; text[i]1 != '\0'; i++) {6 sum→ 1 += text[i]1 - '0';7}All 4 passes — pass 1 is the card above pass itext[i]sum1 0 1 0 → 1 2 1 2 1 → 3 3 2 3 3 → 6 4 3 4 6 → 10 return sum;
7 }8 return sum10;9}checksum ← 10, ok ← 1
14 int expected = 10;15 int checksum→ 10 = digitChecksum(digits1234);16 int ok→ 1 = checksum10 == expected10;1718 printf("useAlt=%d digits=%s checksum=%d ok=%d\n", useAlt0, digits1234, checksum10, ok1);19 return 0;20}outputuseAlt=0 digits=1234 checksum=10 ok=1
useAlt ← 1, digits ← 1235, expected ← 10
11int main(void) {12 int useAlt→ 1 = 1;13 const char *digits→ 1235 = useAlt1 ? "1235" : "1234";14 int expected→ 10 = 10;15 int checksum = digitChecksum(digits1235);16 int ok = checksum == expected;sum ← 0
3int digitChecksum(const char *text1235) {4 int sum→ 0 = 0;5 for (int i = 0; text[i] != '\0'; i++) {sum ← 1
pass 1 of 44int sum = 0;5for (int i0 = 0; text[i]1 != '\0'; i++) {6 sum→ 1 += text[i]1 - '0';7}All 4 passes — pass 1 is the card above pass itext[i]sum1 0 1 0 → 1 2 1 2 1 → 3 3 2 3 3 → 6 4 3 5 6 → 11 return sum;
7 }8 return sum11;9}checksum ← 11, ok ← 0
14 int expected = 10;15 int checksum→ 11 = digitChecksum(digits1235);16 int ok→ 0 = checksum11 == expected10;1718 printf("useAlt=%d digits=%s checksum=%d ok=%d\n", useAlt1, digits1235, checksum11, ok0);19 return 0;20}outputuseAlt=1 digits=1235 checksum=11 ok=0