1 #region 获得6位优惠码 zhy
2 public static string CreatePromoCode(string code)
3 {
4 if (code == "")
5 {
6 return "a00001";
7 }
8 else
9 {
10 string new_code = "";
11 new_code = CreateGrapheme(code);
12 new_code += CreateNumber(code);
13 return new_code;
14 }
15 }
16 #endregion
17
18 #region 拼接字母 zhy
19 public static string CreateGrapheme(string code)
20 {
21 string new_code = "";
22 //获取字母
23 string grapheme = GetGrapheme(code);
24 //获得数字
25 string num = GetNumber(code);
26 //最后一个字母为z从新拼接否则获取该字母下一个字母拼接
27 if (grapheme.Substring(grapheme.Length - 1) == "Z")
28 {
29 switch (grapheme.Length)
30 {
31 case 1:
32 if (Convert.ToInt32(num) >= 99999)
33 {
34 new_code = "AA";
35 }
36 else
37 {
38 new_code += grapheme;
39 }
40 break;
41 case 2:
42 if (Convert.ToInt32(num) >= 9999)
43 {
44 new_code = "AAA";
45 }
46 else
47 {
48 new_code += grapheme;
49 }
50 break;
51 case 3:
52 if (Convert.ToInt32(num) >= 999)
53 {
54 new_code = "AAAA";
55 }
56 else
57 {
58 new_code += grapheme;
59 }
60 break;
61 case 4:
62 if (Convert.ToInt32(num) >= 99)
63 {
64 new_code = "AAAAA";
65 }
66 else
67 {
68 new_code += grapheme;
69 }
70 break;
71 }
72 }
73 else
74 {
75 switch (grapheme.Length)
76 {
77 case 1:
78 if (Convert.ToInt32(num) >= 99999)
79 {
80 char new_grapheme = Convert.ToChar(Convert.ToInt16(grapheme.Substring(new_code.Length - 1).ToCharArray()[0]) + 1);
81 new_code += grapheme.Substring(0, new_code.Length - 1) + new_grapheme.ToString();
82 num = "00000";
83 }
84 else
85 {
86 new_code += grapheme;
87 }
88 break;
89 case 2:
90 if (Convert.ToInt32(num) >= 9999)
91 {
92 char new_grapheme = Convert.ToChar(Convert.ToInt16(grapheme.Substring(new_code.Length - 1).ToCharArray()[0]) + 1);
93 new_code += grapheme.Substring(0, new_code.Length - 1) + new_grapheme.ToString();
94 num = "0000";
95 }
96 else
97 {
98 new_code += grapheme;
99 }
100 break;
101 case 3:
102 if (Convert.ToInt32(num) >= 999)
103 {
104 char new_grapheme = Convert.ToChar(Convert.ToInt16(grapheme.Substring(new_code.Length - 1).ToCharArray()[0]) + 1);
105 new_code += grapheme.Substring(0, new_code.Length - 1) + new_grapheme.ToString();
106 num = "000";
107 }
108 else
109 {
110 new_code += grapheme;
111 }
112 break;
113 case 4:
114 if (Convert.ToInt32(num) >= 99)
115 {
116 char new_grapheme = Convert.ToChar(Convert.ToInt16(grapheme.Substring(new_code.Length - 1).ToCharArray()[0]) + 1);
117 new_code += grapheme.Substring(0, new_code.Length - 1) + new_grapheme.ToString();
118 num = "00";
119 }
120 else
121 {
122 new_code += grapheme;
123 }
124 break;
125 case 5:
126 if (Convert.ToInt32(num) >= 9)
127 {
128 char new_grapheme = Convert.ToChar(Convert.ToInt16(grapheme.Substring(new_code.Length - 1).ToCharArray()[0]) + 1);
129 new_code += grapheme.Substring(0, new_code.Length - 1) + new_grapheme.ToString();
130 num = "0";
131 }
132 else
133 {
134 new_code += grapheme;
135 }
136 break;
137 }
138 }
139 return new_code;
140 }
141 #endregion
142
143 #region 获得字母 zhy
144 public static string GetGrapheme(string code)
145 {
146 //定义获取字母的正则
147 Regex grapheme_regex = new Regex(@"[A-Z]+");
148 //找到字符串中的匹配项
149 Match grapheme_match = grapheme_regex.Match(code);
150 return grapheme_match.Value;
151 }
152 #endregion
153
154 #region 获得数字 zhy
155 public static string GetNumber(string code)
156 {
157 //定义获取数字的正则
158 Regex num_regex = new Regex(@"[^\d.\d]");
159 //剔除字符串中除数字以外的字符
160 string num = Regex.Replace(code, @"[^\d.\d]", "").ToString();
161 return num;
162 }
163 #endregion
164
165 #region 拼接数字 zhy
166 public static string CreateNumber(string code)
167 {
168 string new_code = "";
169 //获取字母
170 string grapheme = GetGrapheme(code);
171 //获得数字
172 string num = GetNumber(code);
173
174 int old_num = Convert.ToInt32(num);
175 //计算字母后的数字
176 switch (num.ToString().Length)
177 {
178 case 1:
179 if (old_num < 9)
180 {
181 new_code = new_code + (old_num++);
182 }
183 else
184 {
185 //优惠码已经配到头
186 new_code = "";
187 }
188 break;
189 case 2:
190 if (old_num < 99)
191 {
192 int temporary_num = old_num;
193 temporary_num++;
194 //判断数字是否从01开始
195 if (temporary_num.ToString().Length == 1)
196 {
197 new_code = new_code + "0" + temporary_num.ToString();
198 }
199 else
200 {
201 new_code = new_code + temporary_num.ToString();
202 }
203 }
204 else
205 {
206 //优惠码已经配到头
207 new_code = new_code + "0";
208 }
209 break;
210 case 3:
211 if (old_num < 999)
212 {
213 int temporary_num = old_num;
214 temporary_num++;
215 //判断数字是否从01开始
216 if (temporary_num.ToString().Length == 1)
217 {
218 new_code = new_code + "00" + temporary_num.ToString();
219 }
220 else if (temporary_num.ToString().Length == 2)
221 {
222 new_code = new_code + "0" + temporary_num.ToString();
223 }
224 else
225 {
226 new_code = new_code + temporary_num.ToString();
227 }
228 }
229 else
230 {
231 //优惠码已经配到头
232 new_code = "01";
233 }
234 break;
235 case 4:
236 if (old_num < 9999)
237 {
238 int temporary_num = old_num;
239 temporary_num++;
240 //判断数字是否从01开始
241 if (temporary_num.ToString().Length == 1)
242 {
243 new_code = new_code + "000" + temporary_num.ToString();
244 }
245 else if (temporary_num.ToString().Length == 2)
246 {
247 new_code = new_code + "00" + temporary_num.ToString();
248 }
249 else if (temporary_num.ToString().Length == 3)
250 {
251 new_code = new_code + "0" + temporary_num.ToString();
252 }
253 else
254 {
255 new_code = new_code + temporary_num.ToString();
256 }
257 }
258 else
259 {
260 //优惠码已经配到头
261 new_code = "001";
262 }
263 break;
264 case 5:
265 if (old_num < 99999)
266 {
267 int temporary_num = old_num;
268 temporary_num++;
269 //判断数字是否从01开始
270 if (temporary_num.ToString().Length == 1)
271 {
272 new_code = new_code + "0000" + temporary_num.ToString();
273 }
274 else if (temporary_num.ToString().Length == 2)
275 {
276 new_code = new_code + "000" + temporary_num.ToString();
277 }
278 else if (temporary_num.ToString().Length == 3)
279 {
280 new_code = new_code + "00" + temporary_num.ToString();
281 }
282 else if (temporary_num.ToString().Length == 4)
283 {
284 new_code = new_code + "0" + temporary_num.ToString();
285 }
286 else
287 {
288 new_code = new_code + temporary_num.ToString();
289 }
290 }
291 else
292 {
293 //优惠码已经配到头
294 new_code = "0001";
295 }
296 break;
297 }
298 return new_code;
299 }
300 #endregion