diff --git a/mbtk/libgsw_lib/gsw_sms_interface.c b/mbtk/libgsw_lib/gsw_sms_interface.c
index a99f73f..8d38568 100755
--- a/mbtk/libgsw_lib/gsw_sms_interface.c
+++ b/mbtk/libgsw_lib/gsw_sms_interface.c
@@ -143,7 +143,7 @@
 // static void (*mbtk_log)(int level, const char *format, ...);
 // static void (*mbtk_log_init)(char *path, char *tag);
 int (*smsPduEncode)(const char *smsc, const char *da_num, const char *msg, int charset, char *smsc_pdu, char **pdu);
-int (*smsPduDecode)(const char *pdu_str, int pdu_len, char *da_num, char *smsc, char *msg, int *charset, int *curr_pack, int *total_pack, char *date);
+int (*smsPduDecode)(const char *pdu_str, int pdu_len, char *da_num, char *smsc, char *msg, int *charset, int *curr_pack, int *total_pack, char *date, int *ref_num);
 kal_int32 (*_mdapi_sms_get_msg_num)(const char *msg, int charset, kal_int32 *msg_num, kal_int32 *msg_len);
 
 #define GSW_SMS "[HAL][GSW_SMS]"
@@ -266,7 +266,7 @@
     }
 
     
-    smsPduDecode = (int (*)(const char *pdu_str, int pdu_len, char *da_num, char *smsc, char *msg, int *charset, int *curr_pack, int *total_pack, char *date))dlsym(dlHandle_mbtk,"smsPduDecode");
+    smsPduDecode = (int (*)(const char *pdu_str, int pdu_len, char *da_num, char *smsc, char *msg, int *charset, int *curr_pack, int *total_pack, char *date, int *ref_num))dlsym(dlHandle_mbtk,"smsPduDecode");
     if (smsPduDecode == NULL) 
     {
         LOGE(GSW_SMS,"smsPduDecode dlsym fail\n");
@@ -284,16 +284,16 @@
 
 }
 
-static void generate_sms_id(char* dest, const char* num, const char* date) {
-    snprintf(dest, 64, "%.30s_%.30s", num, date);
+static void generate_sms_id(char* dest, const char* num, int ref_num) {
+    snprintf(dest, 64, "%.30s_%d", num, ref_num);
 }
 
 // 查找或创建短信重组器
-static SmsReassembler* get_sms_reassembler(const char* num, const char* date, int total_segments)
+static SmsReassembler* get_sms_reassembler(const char* num, int ref_num, int total_segments)
 {
     char msg_id[64];
-    generate_sms_id(msg_id, num, date);
-    
+    generate_sms_id(msg_id, num, ref_num);
+    LOGE(GSW_SMS,"msg_id:%s\n",msg_id);
     time_t current_time = time(NULL);
     
     for (int i = 0; i < MAX_SMS_REASSEMBLERS; i++)
@@ -422,6 +422,7 @@
     int ret = -1;
     int curr_pack = 1;
     int total_pack = 1;
+    int ref_num = 0;
     if(ptr == NULL)
     {
         LOGE(GSW_SMS,"ptr is null");
@@ -435,7 +436,7 @@
     {
         strncpy(received_pdu, (const char *)ptr, data_len);
     }
-    ret = smsPduDecode((const char *)received_pdu, data_len, num, smsc, msg, &charset, &curr_pack, &total_pack,date);
+    ret = smsPduDecode((const char *)received_pdu, data_len, num, smsc, msg, &charset, &curr_pack, &total_pack, date,&ref_num);
     if(ret != 0)
     {
         LOGE(GSW_SMS,"smsPduDecode fail\n");
@@ -471,7 +472,7 @@
     {
         if(total_pack > 1)
         {
-            SmsReassembler* reassembler = get_sms_reassembler(num, date, total_pack);
+            SmsReassembler* reassembler = get_sms_reassembler(num, ref_num, total_pack);
             if (!reassembler)
             {
                 LOGE(GSW_SMS, "Failed to get SMS reassembler");
@@ -489,15 +490,16 @@
                     return;
                 }
                 reassembler->received_count++;
+                LOGE(GSW_SMS, "seg_index:%d\n",reassembler->received_count);
             }
-    
+            LOGE(GSW_SMS, "seg_index:%d\n",seg_index);
             // 检查是否所有分片都已接收
             if (reassembler->received_count == reassembler->total_segments)
             {
                 char* full_msg = reassemble_sms(reassembler);
                 if (full_msg)
                 {
-                    
+                    LOGE(GSW_SMS, "total_segments:%d\n",reassembler->received_count);
                     gsw_sms_msg.content_encode = charset;
                     strncpy(gsw_sms_msg.src_num, num, sizeof(gsw_sms_msg.src_num) - 1);
                     gsw_sms_msg.content_len = strlen(full_msg);
@@ -506,7 +508,7 @@
                                     gsw_sms_msg.content_len : sizeof(gsw_sms_msg.content) - 1;
                     strncpy(gsw_sms_msg.content, full_msg, copy_size);
                     gsw_sms_msg.content[copy_size] = '\0';
-                    
+                    LOGE(GSW_SMS, "gsw_sms_msg:%s\n",gsw_sms_msg.content);
                     snprintf((char *)gsw_sms_date.timezone, sizeof(gsw_sms_date.timezone), "%s", "+8");
                     
                     if (gsw_sms_callback)
