Google 工作表:调整数组公式以自动出现在每一行中

Google Sheets: Adjusting an array formula to auto-appear in every row

有问题的公式是=IF (ISBLANK(H2),"", ARRAY_CONSTRAIN(ARRAYFORMULA(IF( (MOD(SUM(INT(MID(REPT("0",20-LEN(H2))&H2,ROW(:),1)*(MOD(ROW(:),2)+1)/10)+MOD(MID(REPT("0",20-LEN(H2))&H2,ROW(:),1)*(MOD(ROW(:),2)+1),10)),10)=0), "✔", "❌")), 1, 1))

在英语中,它检查 H2 是否包含有效信用卡(通过 Luhn 算法、讨论/示例数据 here)。预期输出有效 = ✔;无效 = ❌;如果空白则什么都没有。

我正在尝试将其调整为显示在每一行中,但似乎无法确定。 (使用像公式 =LEFT(H2,4)&" "&MID(H2,5,6) 这样的技巧,如果它是 =arrayformula(LEFT(H2:H100,4)&" "&MID(H2:H100,5,6)) 它会出现在每一行中,而无需在插入新行时手动重新填充它)。

Sample google sheet.

试试这个:

=ARRAYFORMULA(
  IF(
    H2:H = "",
      "",
      IF(
        MOD(
          MMULT(
              MID(REPT("0", 20 - LEN(H2:H)) & H2:H, SEQUENCE(1, 10, 2, 2), 1)
            + MID(REPT("0", 20 - LEN(H2:H)) & H2:H, SEQUENCE(1, 10, 1, 2), 1) * 2
            - (MID(REPT("0", 20 - LEN(H2:H)) & H2:H, SEQUENCE(1, 10, 1, 2), 1) * 2 > 9) * 9,
            SEQUENCE(10, 1, 1, 0)
          ),
          10
        ) = 0,
          "✔",
          "❌"
      )
  )
)

如果您想要更通用的解决方案(卡号超过 20 位),请将 20 替换为 MAX(LEN(H2:H)) + MOD(MAX(LEN(H2:H)), 2),将 10 替换为 (MAX(LEN(H2:H)) + MOD(MAX(LEN(H2:H)), 2)) / 2