Kod şu
Kod: Tümünü seç
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
//#include "calcimei.h"
#define OUT_FILE "MP0B_001_NEW"
int main(int argc, char *argv[])
{
char *str = "357369035621901";
FILE* output;
char inp_imei[15];
char out_imei[12] = {0};
int i, ret;
char *mode;
if (argc < 2 || strlen(argv[1])!=15 || (argc==3 && strlen(argv[2])!=15))
{
fprintf(stdout, "Use: %s <IMEI_1 15 digits> [IMEI_2 15 digits]\n", argv[0]);
return 1;
}
for (i=1; i < argc; i++)
{
memset(inp_imei, 0, sizeof(inp_imei));
memset(out_imei, 0, sizeof(out_imei));
strncpy(inp_imei, argv[i], sizeof(inp_imei));
fprintf(stdout, "New IMEI %d (15 digits):%s\n", i, inp_imei);
ret = calc_imei(&inp_imei, &out_imei);
if ( ret )
{
fprintf(stderr, "Invalid IMEI %d format!\n", i);
return 1;
}
mode="w";
if (i==2)
{
mode="a";
}
output = fopen(OUT_FILE, mode);
fwrite(out_imei, 1, sizeof(out_imei), output);
fclose(output);
}
fprintf(stdout, "New IMEI in file = %s\n", OUT_FILE);
return 0;
}
int calc_imei(char inp_imei[15], char out_imei[12])
{
char out_mask[12] = {0xAB, 0xA0, 0x6F, 0x2F, 0x1F, 0x1E, 0x9A, 0x45, 0x0, 0x0, 0x0, 0x0};
int i=0, j=0;
for (i=0, j=0; i < 15; i++, j++)
{
if (inp_imei[i] < '0' || inp_imei[i] > '9')
{
return 1;
}
out_imei[j] = (inp_imei[i] - '0');
if (i >= 14)
break;
if (inp_imei[i+1] < '0' || inp_imei[i+1] > '9')
{
return 1;
}
out_imei[j] += ((inp_imei[i+1] - '0') << 4);
out_imei[j] = out_imei[j] ^ out_mask[j];
i++;
}
out_imei[j] = out_imei[j] ^ out_mask[j];
out_imei[8] = 0x57; //Может быть и 0x0, ни на что не влиÑет
out_imei[9] = 0xDB; //Может быть и 0x0, ни на что не влиÑет
out_imei[10] = out_imei[11] = 0;
for (i = 0; i < 10; i++)
{
if (i & 0x1)
{
out_imei[11] += out_imei[i];
}
else
{
out_imei[10] += out_imei[i];
}
}
return 0;
}