营业部代码换码算法示例

源代码 来自 上海证券交易所技术文档,新一代交易系统 市场参与者 接口规格说明书(1.08版),附录7。我添加了测试代码,便于理解。

 1 #include "stdafx.h"
 2 #include <stdlib.h>
 3 #include <stdio.h>
 4 #include <Windows.h>
 5 
 6 BOOL branchid2ReffPrefix(char *branchid, char *reff)
 7 {
 8     int x, m, n, p, q; 
 9     char temp[2];
10     x = atoi(branchid);
11     
12     if (x<1000 || x>4843) return FALSE;
13     
14     m = (x - 1000) / 62; 
15     n = (x - 1000) % 62;
16     
17     if (m >= 0 && m <= 9)            p = m + 48;
18     else if (m >= 10 && m <= 35)    p = m + 55;
19     else if (m >= 36 && m <= 61)    p = m + 61;
20 
21     if (n >= 0 && n <= 9)            q = n + 48;
22     else if (n >= 10 && n <= 35)    q = n + 55;
23     else if (n >= 36 && n <= 61)    q = n + 61;
24 
25     temp[0] = p; 
26     temp[1] = q;
27     memcpy(reff, temp, 2);
28 
29     return TRUE;
30 }
31 
32 BOOL reffPrefix2Branchid(char *reff, char *branchid)
33 {
34     int x = 0, m = 0, n = 0, p = 0, q = 0;
35     p = *reff; 
36     q = *(reff + 1);
37     
38     if (p >= 97 && p <= 122)        m = p - 61;
39     else if (p >= 65 && p <= 90)    m = p - 55;
40     else if (p >= 48 && p <= 57)    m = p - 48;
41 
42     if (q >= 97 && q <= 122)        n = q - 61;
43     else if (q >= 65 && q <= 90)    n = q - 55;
44     else if (q >= 48 && q <= 57)    n = q - 48;
45 
46     if (m == 0 || n == 0) return 2; 
47     x = m * 62 + n + 1000;
48     
49     printf(branchid, "%d", x); 
50 
51     return TRUE;
52 }
53 
54 int _tmain(int argc, _TCHAR* argv[])
55 {
56     char* branchid_test = { "1234" };    
57     char* reff_test = new char[4];  // 动态分配内存
58     
59     branchid2ReffPrefix(branchid_test, reff_test);
60     reffPrefix2Branchid(reff_test, branchid_test);
61 
62     return 0;
63 }

 

posted @ 2015-06-14 11:53  壬子木  阅读(139)  评论(0)    收藏  举报