1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
use gs1::epc::{decode_binary, EPCValue};
use gs1::GS1;

/// SGTIN-96
/// 序列化全球贸易项目编号
pub fn sgtin_96() -> String {
    let tt = hex::decode("3074257BF7194E4000001A85").unwrap();
    let tt = hex::encode(tt);
    println!("{}", tt);
    let data = decode_binary(&hex::decode("3074257BF7194E4000001A85").unwrap()).unwrap();
    assert_eq!(data.to_uri(), "urn:epc:id:sgtin:0614141.812345.6789");
    assert_eq!(
        data.to_tag_uri(),
        "urn:epc:tag:sgtin-96:3.0614141.812345.6789"
    );

    match data.get_value() {
        EPCValue::SGTIN96(val) => {
            assert_eq!(val.to_gs1(), "(01) 80614141123458 (21) 6789");
            val.to_gs1()
        }
        _ => String::new()
    }
}

/// SGTIN-198
/// 序列化全球贸易项目编号
pub fn sgtin_198() {
    let data = decode_binary(
        &hex::decode("3674257BF6B7A659B2C2BF100000000000000000000000000000").unwrap(),
    )
        .unwrap();
    assert_eq!(data.to_uri(), "urn:epc:id:sgtin:0614141.712345.32a%2Fb");
    assert_eq!(
        data.to_tag_uri(),
        "urn:epc:tag:sgtin-198:3.0614141.712345.32a%2Fb"
    );

    let data = match data.get_value() {
        EPCValue::SGTIN198(val) => val,
        _ => {
            panic!("Invalid type")
        }
    };
    assert_eq!(data.to_gs1(), "(01) 70614141123451 (21) 32a/b");
}

/// SSCC-96
/// 运输集装箱代码
/// (00) 106141412345678908
pub fn sscc_96() -> String {
    let t = &hex::decode("3174257BF4499602D2000000").unwrap();
    println!("{:#?}", t);

    let data = decode_binary(&hex::decode("3174257BF4499602D2000000").unwrap()).unwrap();
    assert_eq!(data.to_uri(), "urn:epc:id:sscc:0614141.1234567890");
    assert_eq!(data.to_tag_uri(), "urn:epc:tag:sscc-96:3.0614141.1234567890");

    let ttt = "urn:epc:tag:sscc-96:3.0614141.1234567890";
    println!("{}", &ttt[10..=14]);


    let str = String::new();
    match data.get_value() {
        EPCValue::SSCC96(val) => {
            println!("序列号: {}", val.serial);
            println!("指示信号: {}", val.indicator);
            println!("公司: {}", val.company);
            println!("滤器: {}", val.filter);
            println!("隔断: {}", val.partition);
            assert_eq!(val.to_gs1(), "(00) 106141412345678908");
            val.to_gs1()
        }
        _ => str
    }
}

/// sgln-96
pub fn sgln_96() -> String {

    let tt=hex::encode("urn:epc:id:sscc:0614141.1234567890");
    println!("{}",tt);

    let data = decode_binary(&hex::decode("3274257BF46072000000162E").unwrap()).unwrap();
    assert_eq!(data.to_uri(), "urn:epc:id:sscc:0614141.1234567890");
    assert_eq!(data.to_tag_uri(), "urn:epc:tag:sscc-96:3.0614141.1234567890");
    let str = String::new();
    // match data.get_value() {
    //     EPCValue::Unprogrammed(val) => {
    //         assert_eq!(val.to_gs1(), "(00) 106141412345678908");
    //         val.to_gs1()
    //     }
    //     _ => str
    // }
    str
}

/// GID-96
/// 通用标识符
pub fn gid_96() -> String {
    let data = decode_binary(&hex::decode("3500E86F8000A9E000000586").unwrap()).unwrap();
    assert_eq!(data.to_uri(), "urn:epc:id:gid:952056.2718.1414");
    assert_eq!(data.to_tag_uri(), "urn:epc:tag:gid-96:952056.2718.1414");
    data.to_uri()
}