FXSend/LuTool.cpp

475 lines
9.4 KiB
C++
Raw Normal View History

2025-02-28 17:05:50 +08:00
#include "stdafx.h"
#ifndef LUTOOL_CPP
#define LUTOOL_CPP
//<2F><><EFBFBD><EFBFBD><EFBFBD>ҿո<D2BF>
//<2F><><EFBFBD><EFBFBD>:ss Ҫ<>ص<EFBFBD><D8B5>ַ<EFBFBD><D6B7><EFBFBD>
//<2F><><EFBFBD><EFBFBD>:ss <20><><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
char * AllTrim( char * ss )
{
int i,j;
int len;
len=lstrlen(ss);
for (i=1;i<len;i++)
{
if (ss[len-i]==' ')
ss[len-i]=0;
else
break;
}
len=lstrlen(ss);
for (i=0;i<len;i++)
if (ss[i]!=' ') break;
for (j=0;j<len-i;j++)
{
ss[j]=ss[j+i];
}
ss[j]=0;
return ss;
}
//ȥ<><C8A5>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
char * ExChar( char * szSrc , char * pEx )
{
char Buf[4096];
char pComp[4096];
lstrcpy( Buf , szSrc );
long lLen = lstrlen( Buf );
long lLen2= lstrlen( pEx );
int j =0;
for ( int i =0 ; i< lLen ; i++ )
{
memcpy( pComp , Buf+i , lLen2 );
pComp[lLen2] = 0;
if (!lstrcmp( pComp , pEx ) )
{
i = i+lLen2-1; //<2F><>Ϊfor<6F><72><EFBFBD><EFBFBD>1,<2C><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>-1
}
else
{
szSrc[j] = Buf[i];
j++;
}
}
szSrc[j]=0;
return szSrc;
}
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
int FoundChar( char * szSrc , char * pEx , long lLen)
{
char pComp[4096];
if ( lLen == 0 ) //<2F><><EFBFBD><EFBFBD>ûָ<C3BB><D6B8><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ȡԭ<C8A1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lLen = lstrlen( szSrc );
long lLen2= lstrlen( pEx );
int j =0;
for ( int i =0 ; i< lLen ; i++ )
{
memcpy( pComp , szSrc+i , lLen2 );
pComp[lLen2] = 0;
if (!lstrcmp( pComp , pEx ) )
{
return i+1;
}
}
return 0;
}
//<2F><><EFBFBD>յĿͻ<C4BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
//<2F><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>szMess <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
// szRec <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
// iNo <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD><4E><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
// cMake <20><><EFBFBD><EFBFBD>ʲô<CAB2>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>
//<2F><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>:char * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>,<2C><><EFBFBD>󽫷<EFBFBD><F3BDABB7><EFBFBD>NULL
bool GetReqMess(char *szMess,char *szRec,int iNo,char cMake , long lMessLen) //<2F><><EFBFBD>յĿͻ<C4BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
{
int iTemp;
int iTemp1;
int iTempNo;
iTemp1=0;
iTempNo=0;
szRec[0]=0;
if ( lMessLen <=0 ) lMessLen = lstrlen(szMess);
for (iTemp=0;iTemp<lMessLen;iTemp++)
{
szRec[iTemp1]=szMess[iTemp];
if (szMess[iTemp]==cMake)
{
if (iTempNo==iNo)
{
szRec[iTemp1]=0;
return true;
}
iTempNo=iTempNo+1;
iTemp1=-1; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD>滹Ҫ<E6BBB9><D2AA>1<EFBFBD><31><EFBFBD><EFBFBD>Ϊ0
}
iTemp1=iTemp1+1;
}
return false;
}
BOOL EnCodePasswd( char * szSourse , char * szTarget )
{
long lSourseLen = lstrlen( szSourse );
long lCode;
long i;
long lRound;
char szBuf[ 64 ];
*szTarget = 0;
lCode = ( lSourseLen + 13 )*7;
wsprintf( szTarget , "%04X" , lCode );
wsprintf( szTarget , "" );
//<2F><>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lRound = GetRoundValue('A' , 'Z' );
sprintf( szBuf , "%c" , lRound );
lstrcat( szTarget , szBuf );
for ( i = 0 ; i<lSourseLen ; i++ )
{
if ( i%2 == 0 )
{
lCode = ( szSourse[ i ] + 9 - i ) * 4 ;
}
else
{
lCode = ( szSourse[ i ] + 17 - i ) * 3 ;
}
sprintf( szBuf , "%03X" , lCode );
lstrcat( szTarget , szBuf );
lRound = GetRoundValue('A' , 'Z' );
sprintf( szBuf , "%c" , lRound );
lstrcat( szTarget , szBuf );
}
lCode = 0;
return true;
}
BOOL DeCodePasswd( char * szSourse , char * szTarget )
{
long lSourseLen = lstrlen( szSourse );
if ( lSourseLen < 1 )
{
return false;
}
long lCode;
long i;
char szBuf[ 64 ];
char *endptr;
lSourseLen = lSourseLen/4 ;
szSourse ++ ; //<2F><>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for ( i = 0 ; i<lSourseLen ; i++ )
{
strncpy( szBuf , szSourse , 3 );
szBuf[ 3 ]=0;
szSourse = &szSourse[4]; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lCode = strtol( szBuf , &endptr , 16 );
if ( i%2 == 0 )
{
szTarget[ i ] = (char)(( lCode / 4 ) -9 + i);
}
else
{
szTarget[ i ] = (char)(( lCode / 3 ) -17 + i);
}
}
szTarget[ i ] = 0;
lCode = 0;
return true;
}
int CharHex(char ch)
{
//if( isdigit( ch ) ) return( atoi( &ch) );
if( ch >='0' && ch <= '9' ) return( atoi( &ch) );
else {
if( ch == 'a' || ch == 'A' ) return( 10 );
if( ch == 'b' || ch == 'B' ) return( 11 );
if( ch == 'c' || ch == 'C' ) return( 12 );
if( ch == 'd' || ch == 'D' ) return( 13 );
if( ch == 'e' || ch == 'E' ) return( 14 );
if( ch == 'f' || ch == 'F' ) return( 15 );
}
return( 0 );
}
DWORD StrToHex(const char *pstr, CHAR *hex)
{
int n = strlen( pstr );
int i = 0,j = 0;
for( ;i < n;i ++,j++ ) {
CHAR ntmp;
hex[j] = 0;
ntmp = CharHex( pstr[i] );
ntmp <<= 4;
hex[j] += ntmp;
i ++;
ntmp = CharHex( pstr[i] );
hex[j] += ntmp;
}
return n/2;
}
void AsciiToHex( char *pszOrgRandom , char *pszDesRandom , long lLen)
{
char *p = (char *)pszDesRandom;
//long lLen = lstrlen( (char*)pszOrgRandom);
for( long i = 0; i < lLen; ++i )
{
sprintf(p, "%02X", (BYTE)pszOrgRandom[i] );
p += 2;
}
*p=0;
}
/*
void HexToAscii( char *pszOrgRandom , char *pszDesRandom )
{
char Buf[4];
char *pDes = (char *)pszDesRandom;
char *pOrg = (char *)pszOrgRandom;
long lLen = lstrlen( pOrg);
long lTemp;
for( int i = 0; i < lLen/2; ++i )
{
memcpy( Buf , pOrg+i*2 , 2 );
Buf[2] = 0;
lTemp = CharHex(Buf[0])*16 + CharHex(Buf[1]);
if ( i%2 == 1 )
pDes[i-1] = (char)lTemp; //<2F><>ת
else
pDes[i+1] = (char)lTemp; //<2F><>ת
}
pDes[i] = 0;
}
*/
void HexToAscii( char *pszOrgRandom , char *pszDesRandom )
{
char Buf[4];
char *pDes = (char *)pszDesRandom;
char *pOrg = (char *)pszOrgRandom;
long lLen = lstrlen( pOrg);
long lTemp;
for( int i = 0; i < lLen/2; ++i )
{
memcpy( Buf , pOrg+i*2 , 2 );
Buf[2] = 0;
lTemp = CharHex(Buf[0])*16 + CharHex(Buf[1]);
pDes[i] = (char)lTemp;
}
pDes[i] = 0;
}
void ExchangeUniCode( char * pData )
{
char pEx[4];
long lLen = lstrlen( pData );
for ( int i = 0 ; i< lLen/4 ; i++ )
{
memcpy( pEx , pData+i*4 , 2 );
memcpy( pData+i*4 , pData+i*4+2 , 2 );
memcpy( pData+i*4+2 , pEx , 2 );
}
}
void ExchangeChar( char * pData )
{
char pEx;
long lLen = lstrlen( pData );
for ( int i = 0 ; i< lLen ; i++ )
{
pEx = pData[i+1];
pData[i+1] = pData[i];
pData[i] = pEx;
i = i+1 ;
}
}
void HexToPhoneName( char * pHex , char * pName )
{
char szName2[4096];
ExChar( pHex , "\"");
long lLen = lstrlen( pHex );
ExchangeUniCode( pHex );
HexToAscii( pHex , szName2 );
long l = WideCharToMultiByte( CP_ACP,NULL,(LPWSTR)szName2 , lLen/4 , pName , 256 , NULL , NULL);
pName[l] = 0;
}
void PhoneNameToHex( char * pName , char * pHex)
{
char szName2[4096];
char szHex2[4096];
long lLen = lstrlen( pName );
long l = MultiByteToWideChar( CP_ACP,NULL,pName,lLen, (LPWSTR)szName2 , 4096 );
szName2[l*2]=0;
AsciiToHex( szName2 , szHex2 , l*2);
ExchangeUniCode( szHex2 );
wsprintf( pHex , "%s" , szHex2 );
}
long TwoCharToHex( char * Buf )
{
return CharHex(Buf[0])*16 + CharHex(Buf[1]);
}
BOOL GetDeRNFromEnRN(char *pEnRN, char *pDeRN)
{
char RN[64];
if ( DeCodePasswd( pEnRN , RN ) )
{
long lLen = lstrlen( RN );
for ( int i =0 ; i<lLen ; i++ )
{
pDeRN[i]=~(-RN[i]);
}
pDeRN[i]=0;
return true;
}
return false;
}
BOOL GetEnRNFromDeRN(char *pDeRN, char *pEnRN)
{
char RN[64];
long lLen = lstrlen( pDeRN );
for ( int i = 0; i< lLen ; i++ )
{
RN[i] = -(~pDeRN[i]);
}
RN[i] = 0;
return EnCodePasswd( RN , pEnRN );
}
//<2F><><EFBFBD>ع̶<D8B9><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long GetRoundValue(long lMin , long lMax )
{
long l ;
long lRec;
SYSTEMTIME time;
while (true)
{
::GetSystemTime(&time);
l = time.wMinute*600+time.wHour*6000+time.wSecond*200+time.wMilliseconds;
l = rand();
lRec = l%lMax;
if (lRec >= lMin )
return lRec;
}
return l;
}
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ı<EFBFBD>־
int FoundCharEx( char * szSrc , long lSrcLen , char * pEx , long lExLen)
{
char pComp[128];
long lLen = lSrcLen;
if ( lSrcLen <= 0 ) //<2F><><EFBFBD><EFBFBD>ûָ<C3BB><D6B8><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ȡԭ<C8A1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lLen = lstrlen( szSrc );
long lLen2= lExLen;
if ( lLen2 <= 0 ) //<2F><><EFBFBD><EFBFBD>ûָ<C3BB><D6B8><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ȡԭ<C8A1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lLen2 = lstrlen( pEx );
int j =0;
for ( int i =0 ; i< lLen ; i++ )
{
memcpy( pComp , szSrc+i , lLen2 );
pComp[lLen2] = 0;
if (!strncmp( pComp , pEx , lLen2) )
{
return i+1;
}
}
return 0;
}
//<2F>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7BBB0><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬ
BOOL StrCmpMobile( char * pNo1 , char * pNo2 )
{
char szNo1[64];
char szNo2[64];
DZStr( pNo1 , szNo1 ); //<2F><>ת<EFBFBD>ַ<EFBFBD>
DZStr( pNo2 , szNo2 );
ExChar( szNo1 , "+" ); //ȥ<><C8A5>+<2B><>,<2C><><EFBFBD>ʱ<EFBFBD>־
ExChar( szNo2 , "+" );
long lLen1 = lstrlen(szNo1 );
long lLen2 = lstrlen(szNo2 );
long lMin = lLen1>lLen2?lLen2:lLen1;
return !strncmp( szNo1 , szNo2 , lMin );
}
//<2F><>ת<EFBFBD>ַ<EFBFBD>
void DZStr( char * pYChar , char * pDZChar )
{
long lLen = lstrlen( pYChar );
for ( int i = 0 ; i< lLen ; i ++ )
{
pDZChar[i] = pYChar[lLen-i-1];
}
pDZChar[i] = 0;
}
//<2F>⿪7Bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>
long DeCode7Bit(char *pSrc, char * pTag , long lSrcLen)
{
if ( lSrcLen <= 0 )
lSrcLen = lstrlen( pSrc );
//long lSrcLen = lstrlen( pSrc );
unsigned char c,c1;
unsigned char mask1 = 0;
unsigned char mask2 = 0;
long TagCount = 0;
long lCount = 7;
for (int i=0 ; i< lSrcLen ; i++ )
{
c = (unsigned char)pSrc[i]; //ȡ<>õ<EFBFBD>ǰ<EFBFBD><C7B0>Ҫת<D2AA><D7AA><EFBFBD>ַ<EFBFBD>
mask2 = c>>lCount; //ȡ<><C8A1><EFBFBD><EFBFBD>һ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>mask
c1 = c<<(8-lCount); //<2F><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>8bit<69>ұ<EFBFBD>ֵ
c1 = c1>>1; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>λΪ0
c1 = c1|mask1; //<2F>ϲ<EFBFBD><CFB2><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
mask1 = mask2; //<2F><><EFBFBD><EFBFBD>mask
pTag[TagCount] = c1;
TagCount ++ ;
lCount -- ;
if ( lCount <=0 )
{
lCount = 7;
pTag[TagCount] = mask1;
TagCount ++ ;
mask1 = 0;
mask2 = 0;
}
}
pTag[TagCount] = 0;
return TagCount;
}
char * ExMobileGZM( char * pMobile )
{
char szBuf[64];
strcpy( szBuf , pMobile );
if ( !strncmp( szBuf , "+86" , strlen("+86") ) )
{
strcpy( pMobile , szBuf+3 );
return pMobile;
}
if ( !strncmp( szBuf , "0086" , strlen("0086") ) )
{
strcpy( pMobile , szBuf+4 );
return pMobile;
}
if ( !strncmp( szBuf , "86" , strlen("86") ) )
{
strcpy( pMobile , szBuf+2 );
return pMobile;
}
if ( !strncmp( szBuf , "+" , strlen("+") ) )
{
strcpy( pMobile , szBuf+1 );
return pMobile;
}
if ( !strncmp( szBuf , "00" , strlen("00") ) )
{
strcpy( pMobile , szBuf+2 );
return pMobile;
}
return pMobile;
}
#endif