/* @tier easy @module mg @transform msg-gateway-util */ /* * mg_cu_0003.c - 전문게이트웨이 공통 유틸리티 (plain C) [tier=easy] */ #include "mg_cu_0003.h" #include /* Zeller 합동식으로 요일 계산: 0=토,1=일,...,6=금 */ static int mg_cu_0003_dow(int y, int m, int d) { int k, j; if (m < 3) { m += 12; y--; } k = y % 100; j = y / 100; return (d + 13 * (m + 1) / 5 + k + k / 4 + j / 4 + 5 * j) % 7; } /* 수수료: amount=YYYYMMDD, 주말이면 할증 rate 반환 */ long mg_cu_0003_fee(long amount, int rate_bp) { int y, m, d, w; long base; if (amount <= 0 || rate_bp < 0) return 0; y = (int)(amount / 10000L); m = (int)((amount / 100L) % 100L); d = (int)(amount % 100L); w = mg_cu_0003_dow(y, m, d); base = rate_bp; if (w == 0 || w == 1) base += (long)rate_bp / 10; return base; } /* 내림(floor) 단위 정규화: 음수 방향 보정 */ long mg_cu_0003_round_unit(long amount, long unit) { long q; if (unit <= 0) return amount; q = amount / unit; if (amount % unit != 0 && amount < 0) q--; return q * unit; } /* 분류: YYYYMMDD 의 요일(0~6), 오류 -1 */ int mg_cu_0003_classify(long amount) { int y, m, d; if (amount <= 0) return -1; y = (int)(amount / 10000L); m = (int)((amount / 100L) % 100L); d = (int)(amount % 100L); return mg_cu_0003_dow(y, m, d); }