package utils // SplitICCID 按 ICCID 长度拆分为双列存储值 // // 规则: // - 19 位卡:返回 (iccid, nil),iccid_20 写入 NULL // - 20 位卡:返回 (iccid[:19], &iccid),两列均有值 // - 其他长度:返回 ("", nil),调用方应将对应卡标记为失败 // // 注意:iccid_20 必须为 *string 而非 string,GORM 才会将 nil 写入 SQL NULL // 若使用 string 类型,空字符串 "" 不会被转为 NULL,会破坏 Partial Index 语义 func SplitICCID(iccid string) (iccid19 string, iccid20 *string) { switch len(iccid) { case 19: return iccid, nil case 20: prefix := iccid[:19] return prefix, &iccid default: return "", nil } }