B2C 自定义策略中 "CreateRandomString" 函数的问题
Issues with the"CreateRandomString" function in B2C custom policies
对于以下代码,使用“CreateRandomString”:
<ClaimsTransformations>
<ClaimsTransformation Id="SetRandomNumber" TransformationMethod="CreateRandomString">
<InputParameters>
<InputParameter Id="randomGeneratorType" DataType="string" Value="INTEGER"/>
<InputParameter Id="maximumNumber" DataType="int" Value="10"/>
<InputParameter Id="seed" DataType="int" Value="1234567890"/>
<InputParameter Id="stringFormat" DataType="string" Value="{0}"/>
<InputParameter Id="base64" DataType="boolean" Value="false"/>
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="randomNumber" TransformationClaimType="outputClaim"/>
</OutputClaims>
</ClaimsTransformation>
</ClaimsTransformations>
我想要一个 0 到 10 之间的随机数,它 总是 returns 5.
对于 1000 个值,总是 returns 547。
对于 100 个值,总是 returns 54。
对于 10 个值,总是 returns 5。
对于 3 个值,总是 returns 1.
似乎只是在范围中间选择一个数字。
有什么方法可以像 C# Random 方法一样获取随机数吗?
文档提到了种子值的以下注释:
[Optional] For INTEGER randomGeneratorType only. Specify the seed for the random value. Note: same seed yields same sequence of random numbers.
种子值可让您确保获得相同的序列,以防您的策略出于某种原因依赖于该序列。
如文档中的示例所述,您应该在调用此转换时完全消除种子值,以保证每次都有不同的序列。
<ClaimsTransformation Id="SetRandomNumber" TransformationMethod="CreateRandomString">
<InputParameters>
<InputParameter Id="randomGeneratorType" DataType="string" Value="INTEGER" />
<InputParameter Id="maximumNumber" DataType="int" Value="1000" />
<InputParameter Id="stringFormat" DataType="string" Value="OTP_{0}" />
<InputParameter Id="base64" DataType="boolean" Value="false" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="randomNumber" TransformationClaimType="outputClaim" />
</OutputClaims>
</ClaimsTransformation>
尝试消除种子值,因为它应该没问题。
对于以下代码,使用“CreateRandomString”:
<ClaimsTransformations>
<ClaimsTransformation Id="SetRandomNumber" TransformationMethod="CreateRandomString">
<InputParameters>
<InputParameter Id="randomGeneratorType" DataType="string" Value="INTEGER"/>
<InputParameter Id="maximumNumber" DataType="int" Value="10"/>
<InputParameter Id="seed" DataType="int" Value="1234567890"/>
<InputParameter Id="stringFormat" DataType="string" Value="{0}"/>
<InputParameter Id="base64" DataType="boolean" Value="false"/>
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="randomNumber" TransformationClaimType="outputClaim"/>
</OutputClaims>
</ClaimsTransformation>
</ClaimsTransformations>
我想要一个 0 到 10 之间的随机数,它 总是 returns 5.
对于 1000 个值,总是 returns 547。 对于 100 个值,总是 returns 54。 对于 10 个值,总是 returns 5。 对于 3 个值,总是 returns 1.
似乎只是在范围中间选择一个数字。
有什么方法可以像 C# Random 方法一样获取随机数吗?
文档提到了种子值的以下注释:
[Optional] For INTEGER randomGeneratorType only. Specify the seed for the random value. Note: same seed yields same sequence of random numbers.
种子值可让您确保获得相同的序列,以防您的策略出于某种原因依赖于该序列。
如文档中的示例所述,您应该在调用此转换时完全消除种子值,以保证每次都有不同的序列。
<ClaimsTransformation Id="SetRandomNumber" TransformationMethod="CreateRandomString">
<InputParameters>
<InputParameter Id="randomGeneratorType" DataType="string" Value="INTEGER" />
<InputParameter Id="maximumNumber" DataType="int" Value="1000" />
<InputParameter Id="stringFormat" DataType="string" Value="OTP_{0}" />
<InputParameter Id="base64" DataType="boolean" Value="false" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="randomNumber" TransformationClaimType="outputClaim" />
</OutputClaims>
</ClaimsTransformation>
尝试消除种子值,因为它应该没问题。