CHECK SUM

Post Reply
Laurel
Posts: 65
Joined: Fri Oct 21, 2005 8:07 pm
Location: México

CHECK SUM

Post by Laurel »

Hola!

Alguien podría indicarme como calculo el CHECK SUM?

En espera de sus respuestas

Laura E. Hernández H.
Laurel
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Post by Willi Quintana »

Hola, puedes utilizar la funcion vTotal := nStrCrc(vCampo) ; donde nStrCrc, recibe una cadena de caracteres, que puede ser la suma de todos _ de un registro, convirtiendo los numeros, las fechas y campos logicos en caracteres, luego esta funcion propia de FW, te devuelve un numero unico, el cual puedes utilizar opara comparar luego, es decir, si en la primera instancia, la cadena te devuelve un numero, si luego esa cadena es modificada, el numero resultante sera diferente al primero. Ej.

...........
Function OkChkSum(oModo,lAll)
local vRet := .f., vCount := FCount(), vFields := {}, oLbx, vVar
local vChkSum := ""
DEFAULT oModo := 0
DEFAULT lAll := .f.
vFields := LeeRegistro(vFields,vCount) // cargamos el registro al array vfields
vChkSum := ChkSum(vFields)
If Empty(_Field->codv)
oModo := 1
EndIf
If oModo == 0
If _Field->codv <> vChkSum
If !lAll
If MsgNoYes("Este Registro ha sido Alterado fuera de Sistema,,,","Corregir Balance?")
If Rec_Lock(10)
_Field->codv := vChkSum
DbUnLock()
EndIf
EndIf
EndIf
vRet := .f.
EndIf
Else
If Rec_Lock(10)
_Field->codv := vChkSum
DbUnLock()
vRet := .t.
EndIf
EndIf
Return(vRet)
//-----------------------------------------------------------------------------
Function ChkSum(vFields)
local vCont,vLen := Len(vFields) - 1
local vTotal,vCampo := "",lValor
vTotal := 0
For vCont := 1 To vLen
If ValType(vFields[vCont]) = "N"
vCampo := vCampo + AllTrim(Str(vFields[vCont]))
EndIf
If ValType(vFields[vCont]) = "C"
vCampo := vCampo + AllTrim(vFields[vCont])
EndIf
If ValType(vFields[vCont]) = "D"
vCampo := vCampo + DtoS(vFields[vCont])
EndIf
If ValType(vFields[vCont]) = "L"
lValor := vFields[vCont]
vCampo := vCampo + If(&lValor,"t","f")
EndIf
Next vCont
vTotal := nStrCrc(vCampo)
Return(vTotal)
//-----------------------------------------------------------------------------
Function OkChkSumAll()
local vRecno := Recno(), vCampo, lOk
CursorWait()
DbGoTop()
If LastRec() = 0
Return(Nil)
EndIf
While !Eof()
If Recno() <> 0
OkChkSum(0,.t.)
EndIf
DbSkip()
EndDo
DDbGoTo(vRecno)
Return(Nil)
//-----------------------------------------------------------------------------

Salu2
Willi........
Laurel
Posts: 65
Joined: Fri Oct 21, 2005 8:07 pm
Location: México

CHECK SUM

Post by Laurel »

Gracias Willi!
Voy a hacer la prueba.

Laura E. Hernández :D
Laurel
Post Reply